请用C语言编写代码,输入10个字符串,输出其中的最大字符串以及它的长度来输出
1个回答
展开全部
这个问题在于没有限制字符串长度。
那么字符串的输入只能用动态数组。
考虑输入之后还需要统计字符串长度做比较。我这里直接定义数据结构(包含字符串内容及字符串长度),这样在输入的同时就记录了长度。
注意:我这里的字符串输入支持空格,你可以输入任意长度的字符串直到回车确认,但没有写退格删除功能。你按了删除键也不做处理。你想添加删除功能自己在我标注的位置加好了,我就不写了。
#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);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询