int main() { char a[100]; int i=0; int b=0,c=0,d=0,e=0,other=0; printf("输入一串字符为"); gets(a); while(a[i]!='\0') { if(a[i]>='0'&&a[i]<='9') { b++; } else if(a[i]>='a'&&a[i]<='z') { c++; } else if(a[i]>='A'&&a[i]<='Z') { d++; } else if(a[i]==32) { e++; } else { other++; } i++; } printf("数字有%d\n小写字母%d\n大写字母%d\n空格%d\n其他字符%d\n",b,c,d,e,other); }有什么改进的地方
时间: 2024-04-14 21:27:26 浏览: 138
这段代码可以进行一些改进,以下是几个建议:
1. 不推荐使用 `gets()` 函数,因为它没有输入长度的限制,可能会导致缓冲区溢出。可以使用 `fgets()` 函数代替,限制输入的字符数。
2. 可以使用更直观的方式来判断字符的类型,例如使用 `isdigit()` 函数判断数字,`islower()` 函数判断小写字母,`isupper()` 函数判断大写字母。
3. 可以使用更具有可读性的变量名,例如将 `b` 改为 `numCount` 表示数字的个数,将 `c` 改为 `lowerCount` 表示小写字母的个数等。
4. 可以使用 `for` 循环替代 `while` 循环,更简洁地处理数组中的字符。
5. 可以将输出部分的格式化字符串改为更易读的形式,例如使用换行符 `\n` 分隔每个统计结果。
以下是改进后的代码示例:
```c
#include <stdio.h>
#include <ctype.h>
int main()
{
char a[100];
int i = 0;
int numCount = 0, lowerCount = 0, upperCount = 0, spaceCount = 0, otherCount = 0;
printf("输入一串字符为:");
fgets(a, sizeof(a), stdin);
for (i = 0; a[i] != '\0'; i++)
{
if (isdigit(a[i]))
{
numCount++;
}
else if (islower(a[i]))
{
lowerCount++;
}
else if (isupper(a[i]))
{
upperCount++;
}
else if (a[i] == ' ')
{
spaceCount++;
}
else
{
otherCount++;
}
}
printf("数字有%d\n小写字母%d\n大写字母%d\n空格%d\n其他字符%d\n", numCount, lowerCount, upperCount, spaceCount, otherCount);
return 0;
}
```
这样的改进使代码更加可读和可维护。
阅读全文