C语言,统计输入正文中每个数字字符,英文字符和其他字符出现的次数,以EOF结束
用while循环输入,判断是否为EOF,对每个字符进行ASCII码范围判断
#include <stdio.h>
int main()
{
char ch;
int nums=0,chars=0,others=0;
while(scanf("%c",&ch) != EOF)
{
if(ch>='0' && ch<='9')
nums++;
else if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))
chars++;
else
others++;
}
printf("字母%d个,数字%d个,其它%d个",chars,nums,others);
return 0;
}
EOF是个宏,其值为-1,所以统计要以EOF结束,即出现-1时结束统计,参考代码如下:
int main(int argc, const char * argv[]) {
char ch[100];
scanf("%s", ch);
int nums = 0, chars = 0, others = 0, i = 0;
int flag = 0; // 标记是否出现负号
while (ch[i] != '\0') {
printf("%d: %c\n", i + 1, ch[i]);
if (ch[i] >= '0' && ch[i] <= '9') {
// 出现EOF即-1的情况,退出循环,others计数-1(减掉'-')
if (ch[i] == '1' && flag == 1) {
others--;
break;
}
// 不是'1'的时候重置该标记
flag = 0;
nums++;
} else if ((ch[i] >= 'A' && ch[i] <= 'Z') || (ch[i] >= 'a' && ch[i] <= 'z')) {
// 不是'-'的时候重置该标记
flag = 0;
chars++;
} else {
if (ch[i] == '-') {
// 出现负号
flag = 1;
} else {
// 不是'-'的时候重置该标记
flag = 0;
}
others++;
}
i++;
}
printf("数字:%d 个, 字母:%d 个, 其他:%d 个\n", nums, chars, others);
return 0;
}