鱼C论坛

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

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

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

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

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

x
为啥只有第一次输入对,我不是每次都初始化了吗

逐行输出每个句子中出现次数最多的字符及其出现的次数,大小写都要统计比较(如果有多个字符的次数相同,只输出ASCII码最小的字符)。

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.     char str[10000],ch[52],max_char;
  6.     int i,max_count;
  7.     while(fgets(str,10000,stdin)!=NULL)
  8.   {
  9.        int a=strlen(str);
  10.        for(i=0;i<a;i++)
  11.     {
  12.         if(str[i]!=' ')
  13.         {
  14.             if(str[i]>='A'&&str[i]<='Z')
  15.             {
  16.                 ch[str[i]-'A']++;
  17.             }
  18.             else if(str[i]>='a'&&str[i]<='z')
  19.             {
  20.                 ch[str[i]-'a'+26]++;
  21.             }
  22.         }
  23.     }
  24.        for(i=0;i<52;i++)
  25.        {
  26.            if(ch[i]>max_count)
  27.            {
  28.                max_count=ch[i];
  29.                max_char=i;
  30.            }
  31.            else if(ch[i]==max_count&&i<max_char)
  32.            {
  33.                max_char=i;

  34.            }
  35.        }
  36.        if(max_char<26)
  37.        {
  38.            printf("%c %d\n",max_char+'A',max_count);
  39.        }
  40.       if(max_char>=26&&max_char<52)
  41.        {
  42.            printf("%c %d\n",max_char+'a'-26,max_count);
  43.        }
  44.         max_count=0,max_char='a';
  45.   }
  46.     return 0;
  47. }
复制代码

最佳答案
2023-11-25 11:14:35
你在代码中使用了错误的数据类型和语法错误。首先,你应该使用字符数组来存储输入的字符串,而不是字符变量。其次,在比较字符时,应该使用单引号而不是双引号。另外,你需要正确地初始化`max_count`和`max_char`,并且在每次循环之前重新设置它们的值。

这里是修正后的代码示例:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char str[10000], max_char;
  6.     int i, max_count;
  7.    
  8.     while(fgets(str, 10000, stdin) != NULL)
  9.     {
  10.         int count[256] = {0}; // 用于记录每个字符出现的次数
  11.         
  12.         max_count = 0;
  13.         for(i = 0; i < strlen(str); i++)
  14.         {
  15.             if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
  16.             {
  17.                 count[str[i]]++; // 统计字符出现次数
  18.                 if(count[str[i]] > max_count)
  19.                 {
  20.                     max_count = count[str[i]];
  21.                     max_char = str[i];
  22.                 }
  23.                 else if(count[str[i]] == max_count && str[i] < max_char)
  24.                 {
  25.                     max_char = str[i];
  26.                 }
  27.             }
  28.         }
  29.         
  30.         printf("%c %d\n", max_char, max_count);
  31.     }
  32.    
  33.     return 0;
  34. }
复制代码

这段代码中创建了一个大小为256的`count`数组,用于记录每个字符的出现次数。然后,在遍历输入的字符串时,对于每个字母字符,将对应的`count`数组元素加1,并与当前的`max_count`进行比较。如果出现次数更大,则更新`max_count`和`max_char`。如果出现次数相同,但字符的ASCII码更小,则更新`max_char`。

最后,打印出最大出现次数的字符及其次数。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-25 11:14:35 | 显示全部楼层    本楼为最佳答案   
你在代码中使用了错误的数据类型和语法错误。首先,你应该使用字符数组来存储输入的字符串,而不是字符变量。其次,在比较字符时,应该使用单引号而不是双引号。另外,你需要正确地初始化`max_count`和`max_char`,并且在每次循环之前重新设置它们的值。

这里是修正后的代码示例:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char str[10000], max_char;
  6.     int i, max_count;
  7.    
  8.     while(fgets(str, 10000, stdin) != NULL)
  9.     {
  10.         int count[256] = {0}; // 用于记录每个字符出现的次数
  11.         
  12.         max_count = 0;
  13.         for(i = 0; i < strlen(str); i++)
  14.         {
  15.             if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
  16.             {
  17.                 count[str[i]]++; // 统计字符出现次数
  18.                 if(count[str[i]] > max_count)
  19.                 {
  20.                     max_count = count[str[i]];
  21.                     max_char = str[i];
  22.                 }
  23.                 else if(count[str[i]] == max_count && str[i] < max_char)
  24.                 {
  25.                     max_char = str[i];
  26.                 }
  27.             }
  28.         }
  29.         
  30.         printf("%c %d\n", max_char, max_count);
  31.     }
  32.    
  33.     return 0;
  34. }
复制代码

这段代码中创建了一个大小为256的`count`数组,用于记录每个字符的出现次数。然后,在遍历输入的字符串时,对于每个字母字符,将对应的`count`数组元素加1,并与当前的`max_count`进行比较。如果出现次数更大,则更新`max_count`和`max_char`。如果出现次数相同,但字符的ASCII码更小,则更新`max_char`。

最后,打印出最大出现次数的字符及其次数。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 01:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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