乐趣区

关于学习:c语言经典题目ascll字符数量的计算

明天在网上又看到了这道题目:
输出一行字符,别离统计出其中英文字母、空格、数字和其它字符的个数。

提醒:输出的字符能够是任意,当然也能够加空格。

ascll 数值表

这里的知识点就是 ASCII 值,只有咱们把相干知识点把握:

a-z:97-122;
A-Z:65-90;
空格:32;
0-9:48-57;

因而咱们很好晓得应该怎么去敲了,如下所示:

#include <stdio.h>
int main (void)
{char txt[] = "0";
    int num = 0;
    int i = 0;
    int j = 0;

    int  word= 0;
    int  spa = 0;
    int  shuzi = 0;
    int other = 0;

    printf("请输出一行字符;");
    gets_s(txt);           // 这里不能用 scanf

    while (txt[i] != '\0')  // 这里肯定是 \0,不要再犯我以前的谬误哦
    {num = txt[i] + 0; // 很要害的一步,数字转换

        if (97 <= num <= 122)
        {word++;}
        else if (65 <= num <= 90)
        {spa++;}
        else if (num == 32)
        {shuzi++;}
        else
        {other++;}
        i++;     
    }
    printf("输出的字符为:");
    for (j = 0; j < i; j++)
    {printf("%c", txt[i]);
    }
    printf("\r\n 其中,中英文字母个数为:%d \r\n", word);
    printf("空格个数为:%d \r\n", spa);
    printf("数字个数为:%d \r\n", shuzi);
    printf("其余字符个数为:%d \r\n", other);
    






    return 0;
}

   

这篇博客我当初写的看起来很“轻松”,然而我得抵赖,这道题目对于我这个文科生来说,最开始看到的时候,思考了半天,已经犯过几个谬误,因为不晓得怎么查资料,导致一时半会儿,想过放弃:

1. 应用了 scanf,而没用 gets 函数

scanf 函数读取字符串时以空格为分隔,遇到空格就认为以后字符串完结了,所以 scanf 函数无奈读取含有空格的字符串,所以在本例读取输出时(波及空格),要改用 gets(p)函数,读取的字符串存入字符串指针 p 中。

2. 输出的 gets 而不是 gets_s

这是因为 vs 版本迭代的起因

3. 用的 0,而不是’\0’

‘0’和‘\0’的区别。有一个共同点就是它们都是字符,’\0’代表的是空字符,而 0 代表一个 ascll 值,48,因而并非真正空。

真挚的心愿这篇博客能够帮忙到正好遇到这个问题的小伙伴们

退出移动版