检查并改正c语言程序代码:分类统计字符个数 本题要求实现一个函数,统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。 函数接口定义: void StringCount( char s[] ); 其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照 letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数 的格式输出。 裁判测试程序样例: #include <stdio.h> #define MAXS 15 void StringCount( char s[] ); void ReadString( char s[] ); /* 由裁判实现,略去不表 */ int main() { char s[MAXS]; ReadString(s); StringCount(s); return 0; } /* Your function will be put here */ 输入样例: aZ & 09 Az 输出样例: letter = 4, blank = 3, digit = 2, other = 1。void StringCount( char s[] ) { int i,j,f; int a=0,b=0,c=0,d=0; for(i=0;i<MAXS;i++) { if(s[i] >= '0' && s[i] <= '9') c++; else if (s[i] >= 'a' && s[i] <= 'z'||s[i] >= 'A' && s[i] <= 'Z') a++; else(s[i]==32||s[i]==10) b++; } f=sizeof(s); d=f-a-b-c; printf("letter = %d, blank = %d, digit = %d, other = %d",a,b,c,d); }
时间: 2024-03-04 22:49:22 浏览: 101
以下是修改后的代码:
```c
#include <stdio.h>
#define MAXS 15
void StringCount(char s[]){
int i, letter=0, blank=0, digit=0, other=0;
for(i=0; s[i]!='\0'; i++){
if(s[i]>='0' && s[i]<='9')
digit++;
else if((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z'))
letter++;
else if(s[i]==' ' || s[i]=='\n')
blank++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);
}
void ReadString(char s[]){ /* 由裁判实现,略去不表 */ }
int main(){
char s[MAXS];
ReadString(s);
StringCount(s);
return 0;
}
```
主要修改如下:
1. 在函数StringCount中,将循环条件从i<MAXS改为s[i]!='\0',这样可以正确判断字符串的结尾;
2. 在if和else if语句中,将比较字符的代码改为使用单引号括起来的字符,以正确比较字符的ASCII码值;
3. 在else if语句中,将判断小写字母和大写字母的条件合并;
4. 在else语句中,将原本的括号改为if语句,以正确判断空格和回车。
这样修改后,代码就可以正确统计字符串中各种字符的个数并输出了。
阅读全文