求助
输入三句话(每句不超过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);
}
} 有几个问题需要修正:
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]