|  | 
 
 发表于 2020-12-28 21:38:56
|
显示全部楼层
   本楼为最佳答案 
| 复制代码// 定义一个char a[100][101]的二维字符数组,存储用户输入的n行m列个字符。其中n由用户输入确定,
// 1<=n<=100;而m不需要用户输入,1<=m<=100,也就是一行最多只有100个有效字符。将n行字符串按照
// 字符串长度从小到大排序,并输出排序后的结果。
#include<stdio.h>
int main()
{
        char ch, a[100][101];
        int i, j, k, n, m = 0, temp1, temp2, b[2][100];
        scanf("%d", &n);
        getchar();
        for (i = 0;i < n;i++)
        {
                while ((ch = getchar()) != '\n')
                {
                        a[i][m] = ch;
                        m++;
                }
                b[0][i] = m;       // 记录各行字符串的长度
                b[1][i] = i;       // 记录各行字符串的行号
                m = 0;
        }
        
        for (i = 0;i < n;i++)               // 按第 0 行进行由小至大排序
        {
                for (j = 0;j < n - 1;j++)
                {
                        if (b[0][j] > b[0][j + 1])
                        {
                                temp1 = b[0][j];        // 长度小的交换到前面
                                b[0][j] = b[0][j + 1];
                                b[0][j + 1] = temp1;
                                temp2 = b[1][j];        // 同时,记录的行号跟随交换
                                b[1][j] = b[1][j + 1];
                                b[1][j + 1] = temp2;
                        }
                }
        }
        
        for (i = 0;i < n;i++)                 // 输出
        {
                j = b[1][i];
                m = b[0][i];
                for(k = 0;k < m;k++)
                    printf("%c", a[j][k]);
                printf("\n");
        }
        return 0;
}
 | 
 |