|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
输入三句话(每句不超过80个字符),要求分别统计其中英文字母、数字,以及其它字符的个数。
求帮忙看看哪里出问题了。
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- char a[80][3];
- int j,i,x,y,z;
- for(j=0;j<3;j++)
- {
- gets(a[j]);
- }
- for(j=0;j<3;j++)
- {
- x=0,y=0,z=0;
- for(i=0;i<=strlen(a[j]);i++)
- {
- if(a[j][i]>='0'&&a[j][i]<='9')
- {
- x++;
- }
- else if(a[j][i]>='A'&&a[j][i]<='Z'||a[j][i]>='a'&&a[j][i]<='z')
- {
- y++;
- }
- else{
- z++;
- }
- }
- printf("Line %d:digit:%d,char:%d,other:%d\n",j+1,x,y,z-1);
- }
- }
复制代码
有几个问题需要修正:
1. char a[80][3] 应该修改为 char a[3][80],表示三句话,每句话最多80个字符。
2. gets 函数存在安全风险,推荐使用 fgets 替代。
3. strlen 返回的长度是不包括字符串结尾的空字符的,所以在内层循环中应该用 < 而不是 <=。
以下是修改后的代码:
- #include <stdio.h>
- #include <string.h>
- int main() {
- char a[3][80];
- int j, i, x, y, z;
- for (j = 0; j < 3; j++) {
- fgets(a[j], 80, stdin);
- }
- for (j = 0; j < 3; j++) {
- x = 0, y = 0, z = 0;
- for (i = 0; i < strlen(a[j]); i++) {
- if (a[j][i] >= '0' && a[j][i] <= '9') {
- x++;
- } else if ((a[j][i] >= 'A' && a[j][i] <= 'Z') || (a[j][i] >= 'a' && a[j][i] <= 'z')) {
- y++;
- } else {
- z++;
- }
- }
- printf("Line %d: digit: %d, char: %d, other: %d\n", j + 1, x, y, z);
- }
- return 0;
- }
复制代码
上述代码进行了如下修改:
1. 将 char a[80][3] 修改为 char a[3][80]。
2. 使用 fgets 替代 gets。
3. 将内层循环的条件修改为 i < strlen(a[j])。
这样修改后的代码应该可以正确统计每句话中的英文字母、数字和其他字符的个数。希望对你有帮助!
|
|