C 语言 经典例题一百道 17 输入一行字符,分别统计英文字母,空格,数字和其他字符的个数。

方法一:

#include <stdio.h>

void main()
{
    int i,a1 = 0,b1 = 0,c1 = 0;
    char a[10];
    for(i = 0 ;i < 10 ; i++)
    {
        scanf("%c",&a[i]);

        if( a[i] == ' ' )
        {
            a1 = ++a1;
        }
        else if( a[i] >= 'a' && a[i] <= 'z' )
        {
            b1 = ++b1;
        }
        else if(a[i] >= 'A' && a[i] <= 'Z')
        {
            b1 = ++b1;
        
        }
        else
        {
            c1 = ++c1;
        }

    }
    printf("空格字符为%d个,英文字母为%d个,其他字符为%d个\n",a1,b1,c1);


}

总结:该方法具有局限性,只能输入特定长度的字符。每输入一个字符进行分类判断。

然后分类进行累加。

方法二:

方法三:

#include <stdio.h>

void main()
{
    int a1 = 0,b1 = 0,c1 = 0;
    char a;

    while ( ( a=getchar() ) != '\n')
    {
    
        if(a == ' ')
        {
            a1 = ++a1;
        }
        else if(a >= 'a' &&  a <= 'z')
        {
            b1 = ++b1;
        }
        else if(a >= 'A' && a <= 'Z')
        {
            b1 = ++b1;
        
        }
        else
        {
            c1 = ++c1;
        }

    }
    printf("空格字符为%d个,英文字母为%d个,其他字符为%d个\n",a1,b1,c1);

}

总结:不定义数组存放字符。而定义一个字数变量 a,每次重复给a赋值,每次对a进行分类判断。

当  字符 a 等于 ‘换行符 ’ ‘\n’ 时结束重复,并输出分类。

错误做法:

#include <stdio.h>

void main()
{
    int i,a1 = 0,b1 = 0,c1 = 0;
    char a[10];
    for(i = 0 ;i < 10 ; i++)
    {
        scanf("%c",&a[i]);

        if(a[i] == ‘32’')
        {
            a1 = ++a1;
        }
        else if(a[i] >= '65' && a[i] <= '90')
        {
            b1 = ++b1;
        }
        else if(a[i] >= '97' && a[i] <= '122')
        {
            b1 = ++b1;
        
        }
        else
        {
            c1 = ++c1;
        }

    }
    printf("空格字符为%d个,英文字母为%d个,其他字符为%d个\n",a1,b1,c1);


}

总结:不应该用 ‘ a ’,a中用阿拉伯数字 比较大小,‘ a ’ 单引号中的数字表示ASCLL中的十进制的值。

如果上面直接用Ascll中的十进制表示是错误的。

猜你喜欢

转载自blog.csdn.net/qq_26974599/article/details/81448668