-
题目描述:
-
输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
-
输入:
-
输入包括多行字符串,字符串的长度len,(1<=len<=1000)。
-
输出:
-
按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
-
样例输入:
-
hello she sorry he
-
样例输出:
-
he hello sorry
-
错误原因:
-
没有考虑数组长度全部相同的情况。
代码:
# include <stdio.h>
# include <string.h>
typedef struct str
{
int no;
int len;
}str;
str s[1000];
char a[1000][1002];
int cmp(const void*a,const void *b)
{
str* x=(str*)a;
str* y=(str*)b;
if (x->len==y->len)
return x->no-y->no;
else
return x->len-y->len;
}
int main ()
{
int i=0,j;
while (scanf ("%s",a[i])!=EOF)
{
s[i].no=i;
s[i].len=strlen (a[i]);
i++;
}
qsort(s,i,sizeof(str),cmp);
printf ("%s\n",a[s[0].no]);
j=1;
while (s[j].len==s[0].len&&j<i)
{
printf ("%s\n",a[s[j].no]);
j++;
}
if (j!=i)
{
j=i-2;
while (s[j].len==s[i-1].len&&j>=0)
j--;
j++;
while (j<i)
{
printf ("%s\n",a[s[j].no]);
j++;
}
}
return 0;
}