水一发。注意每列中间有空格,每行末无空格。
还有另一个需要注意的地方:如下这段代码
if(s[i]>='A' && s[i]<='Z'){
num[s[i]-'A']++;
res = max(res,num[s[i]-'A']);
}如果写成
if(s[i]>='A' && s[i]<='Z')
res = max(res,++num[s[i]-'A']);那么会出现错误。原因在于max的宏定义。因为max的定义采用三目运算符,所以在res更新的时候,++运算会执行两次,导致错误。以后要注意在宏定义中要少用表达式或者函数调用。
#include <stdio.h>
#include <string.H>
#define N 100
#define max(a,b) ((a)>(b)?(a):(b))
char s[N];
int num[27];
int main(){
int i,j,res=0;
memset(num,0,sizeof(num));
for(j = 0;j<4;j++){
gets(s);
for(i = 0;s[i]!='\0';i++)
if(s[i]>='A' && s[i]<='Z'){
num[s[i]-'A']++;
res = max(res,num[s[i]-'A']);
}
}
for(i = res;i>=1;i--){
for(j = 0;j<26;j++){
if(num[j] >= i)
putchar('*');
else
putchar(' ');
if(j<25)
putchar(' ');
}
putchar('\n');
}
for(j = 0;j<26;j++){
putchar('A'+j);
if(j<25)
putchar(' ');
}
putchar('\n');
return 0;
}
本文探讨了C语言中宏定义的使用细节及其注意事项,特别是在字符串处理过程中的应用。通过一个具体的示例代码,展示了如何正确使用宏定义避免错误,并介绍了如何处理字符串中的大写字母,统计出现频率并进行可视化输出。
536

被折叠的 条评论
为什么被折叠?



