乔治爱啃脚趾 发表于 2023-11-18 11:51:28

求助

输入三句话(每句不超过80个字符),要求分别统计其中英文字母、数字,以及其它字符的个数。
求帮忙看看哪里出问题了。
#include<stdio.h>
#include<string.h>
int main()
{
        char a;
        int j,i,x,y,z;
        for(j=0;j<3;j++)
        {
                gets(a);
        }
        for(j=0;j<3;j++)
        {
                x=0,y=0,z=0;
                for(i=0;i<=strlen(a);i++)
                {
                        if(a>='0'&&a<='9')
                {
                        x++;
                }
                else if(a>='A'&&a<='Z'||a>='a'&&a<='z')
                {
                        y++;
                }
                else{
                        z++;
                }
                }
        printf("Line %d:digit:%d,char:%d,other:%d\n",j+1,x,y,z-1);
}
}

Mike_python小 发表于 2023-11-18 11:52:06

有几个问题需要修正:

1. char a 应该修改为 char a,表示三句话,每句话最多80个字符。
2. gets 函数存在安全风险,推荐使用 fgets 替代。
3. strlen 返回的长度是不包括字符串结尾的空字符的,所以在内层循环中应该用 < 而不是 <=。

以下是修改后的代码:


#include <stdio.h>
#include <string.h>

int main() {
    char a;
    int j, i, x, y, z;

    for (j = 0; j < 3; j++) {
      fgets(a, 80, stdin);
    }

    for (j = 0; j < 3; j++) {
      x = 0, y = 0, z = 0;
      for (i = 0; i < strlen(a); i++) {
            if (a >= '0' && a <= '9') {
                x++;
            } else if ((a >= 'A' && a <= 'Z') || (a >= 'a' && a <= 'z')) {
                y++;
            } else {
                z++;
            }
      }
      printf("Line %d: digit: %d, char: %d, other: %d\n", j + 1, x, y, z);
    }
    return 0;
}


上述代码进行了如下修改:
1. 将 char a 修改为 char a。
2. 使用 fgets 替代 gets。
3. 将内层循环的条件修改为 i < strlen(a)。

这样修改后的代码应该可以正确统计每句话中的英文字母、数字和其他字符的个数。希望对你有帮助!
页: [1]
查看完整版本: 求助