方法一:
#include
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
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
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中的十进制表示是错误的。