请用C语言编写代码,输入10个字符串,输出其中的最大字符串以及它的长度来输出

基本在百度知道搜到的类似的题目,好评率贼低,希望有大佬解答... 基本在百度知道搜到的类似的题目,好评率贼低,希望有大佬解答 展开
 我来答
自我编程
2019-05-27 · 科技优质答主
自我编程
采纳数:1481 获赞数:4282

向TA提问 私信TA
展开全部

这个问题在于没有限制字符串长度。

那么字符串的输入只能用动态数组。

考虑输入之后还需要统计字符串长度做比较。我这里直接定义数据结构(包含字符串内容及字符串长度),这样在输入的同时就记录了长度。

注意:我这里的字符串输入支持空格,你可以输入任意长度的字符串直到回车确认,但没有写退格删除功能。你按了删除键也不做处理。你想添加删除功能自己在我标注的位置加好了,我就不写了。

#include<stdio.h>
#include<malloc.h>
#include <conio.h>
typedef struct strInfo
{
    int len;
    char *str;
}SINFO;
void meError(void *p);//内存申请失败
SINFO *inputStr();//输入任意长度字符串,返回字符串及其长度的数据结构
int main()
{
    int i,max=0,mIndex;
    SINFO *strs[10]={NULL};
    for(i=0;i<10;i++)//根据题目要求,输入任意长度的10个字符串
    {
        strs[i]=inputStr();
        if(max<strs[i]->len)
            max=strs[i]->len,mIndex=i;
    }
    printf("其中最长的字符串是:%s\n长度为:%d\n",strs[mIndex]->str,strs[mIndex]->len);
    return 0;
}
SINFO *inputStr()//输入任意长度字符串,返回字符串及其长度的数据结构
{
    int size=1;
    char inputc,*strSave=NULL;
    SINFO *newStr=(SINFO *)malloc(sizeof(SINFO));
    meError(newStr);
    newStr->len=0;
    newStr->str=(char *)malloc(sizeof(char)*size);
    newStr->str[0]=0;
    inputc=getch();
    while(inputc!='\r')
    {
        if(inputc!=8)
        {
            if(inputc!=0)
                printf("%c",inputc);
            newStr->str[size-1]=inputc;
            size++;
            strSave=(char *)realloc(newStr->str,sizeof(char)*size);
            meError(strSave);
            newStr->str=strSave;
            newStr->str[size-1]=0;
            inputc=getch();
        }
        else
            inputc=0;//考虑显示刷新,这里不支持退格删除,按了也作不处理,你想添加删除,可以替换这个else内容!!
    }
    printf("\n");
    newStr->len=size-1;
    return newStr;
}
void meError(void *p)//内存申请失败
{
    if(p==NULL)
    {
        printf("\n异常:内存申请失败!回车结束程序!\n");
        while(getch()!='\r');
        exit(0);
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式