题目
输入一行字符,统计其中英文字母、空格、数字和其它字符的个数。
思路
- 没说到底输入几个字符,无法用循环给数组赋值
解决:
定义足够大的数组,然后以%s为输入格式,一次性输入字符。然后再通过访问数组的每个元素得到其ASCII码,通过条件控制语句输出。
#include <stdio.h>
int main(void) {
char str1[5];
scanf(“%s”,str1);//注意:不用加&
printf("%s\n", str1);
return 0;
}
scanf()进行读取时,输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址。
- scanf()遇见空格就停止读取,无法统计空格的数目。
解决:
用gets()函数的话,遇到空格就不会返回了,遇到回车才返回。
#include <stdio.h>
int main(void) {
char str1[5];
gets(str1);//与scanf的写法不同
printf("%s\n", str1);
return 0;
}
代码
#include<stdio.h>
#include<string.h>
int main()
{
char str[200];
gets(str);//gets()和scanf()的输入格式不同。此处若用scanf()则总在空格键入时停止输入
int n=strlen(str);
int a[n];
for(int i=0;i<n;i++){
a[i]=str[i];
}
int w=0,x=0,y=0,z=0;
for(int j=0;j<n;j++){
if(a[j]>=65&&a[j]<=90){
w++;
}
else if(a[j]>=97&&a[j]<=122){
w++;
}
else if(a[j]==32){
x++;
}
else if(a[j]>=48&&a[j]<=57){
y++;
}
else{
z++;
}
}
printf("%d\n%d\n%d\n%d",w,x,y,z);
}
参考资料
- http://m.biancheng.net/view/232.html
- https://zhidao.baidu.com/question/54103433.html