鱼C论坛

 找回密码
 立即注册
查看: 1296|回复: 2

[已解决]求助大佬们!字符串怎么多组输入呀?

[复制链接]
发表于 2019-12-20 19:20:01 | 显示全部楼层 |阅读模式

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

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

x
如图所示,

批注 2019-12-20 191400.png

我只知道有while(scanf("%d", &a) != EOF)这种写法,

但是字符串的gets好像不能这样写……

所以我应该怎么写呢?
最佳答案
2019-12-20 20:37:31

参考
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define LINE  100
  5. #define CHARNUM  1000

  6. void printAlpha(char *str);

  7. int main(void)
  8. {
  9.         char *sArr[LINE] = {NULL};
  10.         char *s = NULL;
  11.         char ch;
  12.         int i = 0, j = 0;

  13.         // 获取输入 ! 表示结束
  14.         while ( (ch=getchar()) != '!' )
  15.         {
  16.                 s = (char *) malloc( sizeof(char) * CHARNUM );
  17.                 memset(s, '\0', sizeof(char) * CHARNUM);
  18.                 i = 0;
  19.                 while( (ch=getchar()) != '\n' )
  20.                 {
  21.                        
  22.                         s[i++] = ch;
  23.                 }
  24.                 sArr[j++] = s;
  25.         }

  26.         // 打印输出
  27.         i = 0;
  28.         while( (s=sArr[i++]) != NULL)
  29.         {
  30.                 printAlpha(s);
  31.         }
  32.        

  33.         return 0;
  34. }

  35. void printAlpha(char *str)
  36. {
  37.         int i = 0, j, max;
  38.         int sArr[26] = {0};
  39.         char s;

  40.         // 统计
  41.         while( (s=str[i++]) != '\0' )
  42.         {
  43.                 if ( (s>='A') && (s<='Z') )
  44.                 {
  45.                         // 大写
  46.                         sArr[s - 65] += 1;
  47.                 }
  48.                 else if ( (s>='a') && (s<='z') )
  49.                 {
  50.                         // 小写
  51.                         sArr[s - 97] += 1;
  52.                 }
  53.         }

  54.         // 找出现次数最多的
  55.         max = 0;
  56.         j = 0;
  57.         for( i=0; i<26; i++)
  58.         {
  59.                 if ( sArr[i]>max )
  60.                 {
  61.                         max = sArr[i];
  62.                         j = i;
  63.                 }
  64.         }

  65.         printf("%c = %d\n", 65+j, max);

  66. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-20 20:33:18 | 显示全部楼层
如果是用scanf输入,那么只能用getchar()=='\n'判断,
如果有多个回车,那么没法判断,谁知道你这个回车后是打完了还是没打完
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-20 20:37:31 | 显示全部楼层    本楼为最佳答案   

参考
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define LINE  100
  5. #define CHARNUM  1000

  6. void printAlpha(char *str);

  7. int main(void)
  8. {
  9.         char *sArr[LINE] = {NULL};
  10.         char *s = NULL;
  11.         char ch;
  12.         int i = 0, j = 0;

  13.         // 获取输入 ! 表示结束
  14.         while ( (ch=getchar()) != '!' )
  15.         {
  16.                 s = (char *) malloc( sizeof(char) * CHARNUM );
  17.                 memset(s, '\0', sizeof(char) * CHARNUM);
  18.                 i = 0;
  19.                 while( (ch=getchar()) != '\n' )
  20.                 {
  21.                        
  22.                         s[i++] = ch;
  23.                 }
  24.                 sArr[j++] = s;
  25.         }

  26.         // 打印输出
  27.         i = 0;
  28.         while( (s=sArr[i++]) != NULL)
  29.         {
  30.                 printAlpha(s);
  31.         }
  32.        

  33.         return 0;
  34. }

  35. void printAlpha(char *str)
  36. {
  37.         int i = 0, j, max;
  38.         int sArr[26] = {0};
  39.         char s;

  40.         // 统计
  41.         while( (s=str[i++]) != '\0' )
  42.         {
  43.                 if ( (s>='A') && (s<='Z') )
  44.                 {
  45.                         // 大写
  46.                         sArr[s - 65] += 1;
  47.                 }
  48.                 else if ( (s>='a') && (s<='z') )
  49.                 {
  50.                         // 小写
  51.                         sArr[s - 97] += 1;
  52.                 }
  53.         }

  54.         // 找出现次数最多的
  55.         max = 0;
  56.         j = 0;
  57.         for( i=0; i<26; i++)
  58.         {
  59.                 if ( sArr[i]>max )
  60.                 {
  61.                         max = sArr[i];
  62.                         j = i;
  63.                 }
  64.         }

  65.         printf("%c = %d\n", 65+j, max);

  66. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 14:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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