鱼C论坛

 找回密码
 立即注册
查看: 1140|回复: 1

[已解决]只有第一次输入对

[复制链接]
发表于 2023-11-25 11:14:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
最佳答案
2023-11-25 11:14:35
你在代码中使用了错误的数据类型和语法错误。首先,你应该使用字符数组来存储输入的字符串,而不是字符变量。其次,在比较字符时,应该使用单引号而不是双引号。另外,你需要正确地初始化`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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-25 11:14:35 | 显示全部楼层    本楼为最佳答案   
你在代码中使用了错误的数据类型和语法错误。首先,你应该使用字符数组来存储输入的字符串,而不是字符变量。其次,在比较字符时,应该使用单引号而不是双引号。另外,你需要正确地初始化`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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表