鱼C论坛

 找回密码
 立即注册
查看: 1479|回复: 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

参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LINE  100
#define CHARNUM  1000

void printAlpha(char *str);

int main(void)
{
        char *sArr[LINE] = {NULL};
        char *s = NULL;
        char ch;
        int i = 0, j = 0;

        // 获取输入 ! 表示结束
        while ( (ch=getchar()) != '!' )
        {
                s = (char *) malloc( sizeof(char) * CHARNUM );
                memset(s, '\0', sizeof(char) * CHARNUM);
                i = 0;
                while( (ch=getchar()) != '\n' )
                {
                        
                        s[i++] = ch;
                }
                sArr[j++] = s;
        }

        // 打印输出
        i = 0;
        while( (s=sArr[i++]) != NULL)
        {
                printAlpha(s);
        }
        

        return 0;
}

void printAlpha(char *str)
{
        int i = 0, j, max;
        int sArr[26] = {0};
        char s;

        // 统计
        while( (s=str[i++]) != '\0' )
        {
                if ( (s>='A') && (s<='Z') )
                {
                        // 大写
                        sArr[s - 65] += 1;
                }
                else if ( (s>='a') && (s<='z') )
                {
                        // 小写
                        sArr[s - 97] += 1;
                }
        }

        // 找出现次数最多的
        max = 0;
        j = 0;
        for( i=0; i<26; i++)
        {
                if ( sArr[i]>max )
                {
                        max = sArr[i];
                        j = i;
                }
        }

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

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

使用道具 举报

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

使用道具 举报

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

参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LINE  100
#define CHARNUM  1000

void printAlpha(char *str);

int main(void)
{
        char *sArr[LINE] = {NULL};
        char *s = NULL;
        char ch;
        int i = 0, j = 0;

        // 获取输入 ! 表示结束
        while ( (ch=getchar()) != '!' )
        {
                s = (char *) malloc( sizeof(char) * CHARNUM );
                memset(s, '\0', sizeof(char) * CHARNUM);
                i = 0;
                while( (ch=getchar()) != '\n' )
                {
                        
                        s[i++] = ch;
                }
                sArr[j++] = s;
        }

        // 打印输出
        i = 0;
        while( (s=sArr[i++]) != NULL)
        {
                printAlpha(s);
        }
        

        return 0;
}

void printAlpha(char *str)
{
        int i = 0, j, max;
        int sArr[26] = {0};
        char s;

        // 统计
        while( (s=str[i++]) != '\0' )
        {
                if ( (s>='A') && (s<='Z') )
                {
                        // 大写
                        sArr[s - 65] += 1;
                }
                else if ( (s>='a') && (s<='z') )
                {
                        // 小写
                        sArr[s - 97] += 1;
                }
        }

        // 找出现次数最多的
        max = 0;
        j = 0;
        for( i=0; i<26; i++)
        {
                if ( sArr[i]>max )
                {
                        max = sArr[i];
                        j = i;
                }
        }

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 03:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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