马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为啥只有第一次输入对,我不是每次都初始化了吗
逐行输出每个句子中出现次数最多的字符及其出现的次数,大小写都要统计比较(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
#include<stdio.h>
#include<string.h>
int main()
{
char str[10000],ch[52],max_char;
int i,max_count;
while(fgets(str,10000,stdin)!=NULL)
{
int a=strlen(str);
for(i=0;i<a;i++)
{
if(str[i]!=' ')
{
if(str[i]>='A'&&str[i]<='Z')
{
ch[str[i]-'A']++;
}
else if(str[i]>='a'&&str[i]<='z')
{
ch[str[i]-'a'+26]++;
}
}
}
for(i=0;i<52;i++)
{
if(ch[i]>max_count)
{
max_count=ch[i];
max_char=i;
}
else if(ch[i]==max_count&&i<max_char)
{
max_char=i;
}
}
if(max_char<26)
{
printf("%c %d\n",max_char+'A',max_count);
}
if(max_char>=26&&max_char<52)
{
printf("%c %d\n",max_char+'a'-26,max_count);
}
max_count=0,max_char='a';
}
return 0;
}
你在代码中使用了错误的数据类型和语法错误。首先,你应该使用字符数组来存储输入的字符串,而不是字符变量。其次,在比较字符时,应该使用单引号而不是双引号。另外,你需要正确地初始化`max_count`和`max_char`,并且在每次循环之前重新设置它们的值。
这里是修正后的代码示例: #include <stdio.h>#include <string.h>int main(){ char str[10000], max_char; int i, max_count; while(fgets(str, 10000, stdin) != NULL) { int count[256] = {0}; // 用于记录每个字符出现的次数 max_count = 0; for(i = 0; i < strlen(str); i++) { if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) { count[str[i]]++; // 统计字符出现次数 if(count[str[i]] > max_count) { max_count = count[str[i]]; max_char = str[i]; } else if(count[str[i]] == max_count && str[i] < max_char) { max_char = str[i]; } } } printf("%c %d\n", max_char, max_count); } return 0;}
这段代码中创建了一个大小为256的`count`数组,用于记录每个字符的出现次数。然后,在遍历输入的字符串时,对于每个字母字符,将对应的`count`数组元素加1,并与当前的`max_count`进行比较。如果出现次数更大,则更新`max_count`和`max_char`。如果出现次数相同,但字符的ASCII码更小,则更新`max_char`。
最后,打印出最大出现次数的字符及其次数。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
|