|
发表于 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;
- }
复制代码 |
|