解题思路: 此题可用两种方法来做
方法一:
1.了解ASCII表,那些字符在哪里,用那些字符对应的数字,也可不用了解,直接用字符就行
2.要声明4个变量分别记录题目(字母、数字、空格、其他字符)要求的数量,和一个字符变量利用getchar()获得赋值
3.用getchar()利用while循环读取字符,while循环里用if else嵌套给对应的字符数加一
4.利用printf()输出出来
方法二:
如果对gets(),strlen(),数组不了解的话,此法可不看
1.先声明一个数组用于gets()来存储输入
声明4个变量来存储对应的字符数
2.strlen()获取输入的长度,用于后面的for循环
3.利用for循环计算各字符数
注意事项: 注意while循环里里面的条件
参考代码:
1.利用getchar()
#include <stdio.h> int main(void) { int letter = 0, number = 0, space = 0, other = 0; char ch; while( (ch = getchar()) != '\n'){ /*这里的‘\n’不能换成EOF,要不就把输入的换行符输入进来当成其他字符处理, 因此其他字符的数量将比题目所给的数量多一*/ if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) letter += 1; //letter表示字母数量 else if (ch == ' ') space += 1; //空格数量 else if (ch >= '0' && ch <= '9') number += 1; //数字数量 else other += 1; //其他字符数量 } printf("%d %d %d %d", letter, number, space, other); return 0; }
ii:for(),数组处理
#include <stdio.h> #include <string.h> int main(void) { char str[200];//声明一个数组用于存储输入的字符 int letter = 0, number = 0, space = 0, other, n; gets(str); //获取输入并存储到数组里,gets会把输入的换行符\n丢弃 n = strlen (str); //获取输入的字符长度 for(int i = 0; i < n; i++)//for循环可以声明变量同时初始化,多个声明用 , 逗号隔开 { if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) letter += 1; if (str[i] == ' ') space += 1; if (str[i] >= '0' && str[i] <= '9') number += 1; } other = n - space - number - letter; //把整个字符长度减去字母数、空格、数字得出其他字符的数量 printf("%d %d %d %d", letter, number, space, other); return 0; }
0.0分
94 人评分
#include<stdio.h> int main() { int a,b,c,d; char h; //printf("请输入一行字符串:"); while((h=getchar())!='\n') { if(h>='a'&&h<='z'||h>='A'&&h<='Z') { a++; } else if(h>='0'&&h<='9') { b++; } else if(h==' ') { c++; } else { d++; } } printf("%d %d %d %d",a,b,c,d); return 0; } 我的这个为什么结果中数字字符总是多一个呢
星糖 2023-09-17 10:39:35 |
我知道了是因为没有初始化为0
#include<stdio.h> int main() { int a,b,c,d; char h; printf("请输入一行字符串:"); getchar(); h=getchar(); while(h!='\n') { if(h>='a'&&h<='z'||h>='A'&&h<='Z') { a++; } else if(h>='0'&&h<='9') { b++; } else if(h==' ') { c++; } else { d++; } } printf("字母个数:%d,数字个数:%d %d %d",a,b,c,d); return 0; } 各位大神可以看看我哪里错了吗?
第一个表示输入的东西在哪啊,不用单独写一个getchar()吗
黄小橘 2023-11-21 21:24:48 |
不用getchar()每输入一个字符就判断一下!=' '然后选择是否循环
想问下楼主,第一个方法为什么在第7行输入ch=getchar()再把while后面括号里的改为ch!='\n'就显示时间超限了呢?
流浪到岁月枯黄 2022-10-07 01:35:03 |
换成!= EOF试试
流浪到岁月枯黄 2022-10-07 01:38:42 |
https://blog.csdn.net/m0_62391199/article/details/124228001
流浪到岁月枯黄 2022-10-07 01:39:47 |
程序中的while( getchar() != ‘ ’)语句会不断读取缓冲区中的字符,直到把 读取走,从而达到清空缓冲区的目的。
Lee 2022-10-09 20:51:08 |
@dotcpp0603750 这好像不行,应该是ch=getchar()单独成一条语句,不再while里,它的输入结束不了。
流浪到岁月枯黄 2022-10-10 15:48:20 |
@dotcpp0605188 while( (ch = getchar()) != ' ') 你少了()
我的感悟 2023-11-17 11:42:50 |
@dotcpp0603750 YES
while循环的条件没看懂,为什么是\n?
江雪沉月 2022-11-11 21:26:51 |
就是判断字符串是否输入完毕, 不是回车换行符嘛,当检测到换行了也就意味着字符串输入完毕了,下面就判断字符串的内容就行了
封亚鑫 2023-11-19 12:19:32 |
#include<stdio.h> int main() { char c; int m, n, x, y; m = 0; n = 0; x = 0; y = 0; while ((c = getchar()) != ' ') { if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') m++; else if (c == ' ') n++; else if (c >= '0' && c <= '9') x++; else y++; } printf("%d %d %d %d ", m, n, x, y); return 0; }
封亚鑫 2023-11-19 12:19:52 |
哪里错误呀
徐尽欢 2024-01-20 22:12:56 |
@dotcpp0706029 你不能自己单独发,自己当楼主吗?这发的这么乱,谁会帮你看啊?