题目: 定义一个char a[100][101]的二维字符数组,存储用户输入的n行m列个字符。其中n由用户输入确定,1<=n<=100;而m不需要用户输入,1<=m<=100,也就是一行最多只有100个有效字符。将n行字符串按照字符串长度从小到大排序,并输出排序后的结果。
输入格式:
用户先输入一个整数n,然后按回车键。 接下来输入n个字符串,每个字符串结束时按回车键。 注意:用户输入的一行字符信息中,可能含有空格和标点符号。
输出格式:
按照每行字符串长度升序排列后的输出结果,每行打印一个字符串。题目确保没有两行的长度完全相同。
输入样例:
用户输入数字5并回车后,输入五个字符串。
5
aaa
b
ccccc
dd
eeeeeee
输出样例:
按照输入的五个字符串的长度,从短到长输出。
b
dd
aaa
ccccc
eeeeeee
参考了林同学的代码以后稍作修改的标准答案代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
getchar();
char a[100][101];
int len[n][2];
int i,j,t;
for(i=0;i<n;i++)
{
gets(a[i]);
len[i][0]=strlen(a[i]);
len[i][1]=i;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(len[j][0]>len[j+1][0])
{
t=len[j][0];
len[j][0]=len[j+1][0];
len[j+1][0]=t;
t=len[j][1];
len[j][1]=len[j+1][1];
len[j+1][1]=t;
}
}
}
for(i=0;i<n;i++)
{
puts(a[len[i][1]]);
}
}