鱼C论坛

 找回密码
 立即注册
查看: 2078|回复: 2

[已解决]请大佬帮帮我

[复制链接]
发表于 2020-12-26 09:42:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
二维字符数组按长度排序--2019秋考题 (15分)
定义一个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
//请帮我分析一下并写出您的代码,感谢!
最佳答案
2020-12-28 21:38:56
  1. // 定义一个char a[100][101]的二维字符数组,存储用户输入的n行m列个字符。其中n由用户输入确定,
  2. // 1<=n<=100;而m不需要用户输入,1<=m<=100,也就是一行最多只有100个有效字符。将n行字符串按照
  3. // 字符串长度从小到大排序,并输出排序后的结果。
  4. #include<stdio.h>
  5. int main()
  6. {
  7.         char ch, a[100][101];
  8.         int i, j, k, n, m = 0, temp1, temp2, b[2][100];
  9.         scanf("%d", &n);
  10.         getchar();
  11.         for (i = 0;i < n;i++)
  12.         {
  13.                 while ((ch = getchar()) != '\n')
  14.                 {
  15.                         a[i][m] = ch;
  16.                         m++;
  17.                 }
  18.                 b[0][i] = m;       // 记录各行字符串的长度
  19.                 b[1][i] = i;       // 记录各行字符串的行号
  20.                 m = 0;
  21.         }
  22.        
  23.         for (i = 0;i < n;i++)               // 按第 0 行进行由小至大排序
  24.         {
  25.                 for (j = 0;j < n - 1;j++)
  26.                 {
  27.                         if (b[0][j] > b[0][j + 1])
  28.                         {
  29.                                 temp1 = b[0][j];        // 长度小的交换到前面
  30.                                 b[0][j] = b[0][j + 1];
  31.                                 b[0][j + 1] = temp1;

  32.                                 temp2 = b[1][j];        // 同时,记录的行号跟随交换
  33.                                 b[1][j] = b[1][j + 1];
  34.                                 b[1][j + 1] = temp2;
  35.                         }
  36.                 }
  37.         }
  38.        
  39.         for (i = 0;i < n;i++)                 // 输出
  40.         {
  41.                 j = b[1][i];
  42.                 m = b[0][i];
  43.                 for(k = 0;k < m;k++)
  44.                     printf("%c", a[j][k]);
  45.                 printf("\n");
  46.         }
  47.         return 0;
  48. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-28 21:38:56 | 显示全部楼层    本楼为最佳答案   
  1. // 定义一个char a[100][101]的二维字符数组,存储用户输入的n行m列个字符。其中n由用户输入确定,
  2. // 1<=n<=100;而m不需要用户输入,1<=m<=100,也就是一行最多只有100个有效字符。将n行字符串按照
  3. // 字符串长度从小到大排序,并输出排序后的结果。
  4. #include<stdio.h>
  5. int main()
  6. {
  7.         char ch, a[100][101];
  8.         int i, j, k, n, m = 0, temp1, temp2, b[2][100];
  9.         scanf("%d", &n);
  10.         getchar();
  11.         for (i = 0;i < n;i++)
  12.         {
  13.                 while ((ch = getchar()) != '\n')
  14.                 {
  15.                         a[i][m] = ch;
  16.                         m++;
  17.                 }
  18.                 b[0][i] = m;       // 记录各行字符串的长度
  19.                 b[1][i] = i;       // 记录各行字符串的行号
  20.                 m = 0;
  21.         }
  22.        
  23.         for (i = 0;i < n;i++)               // 按第 0 行进行由小至大排序
  24.         {
  25.                 for (j = 0;j < n - 1;j++)
  26.                 {
  27.                         if (b[0][j] > b[0][j + 1])
  28.                         {
  29.                                 temp1 = b[0][j];        // 长度小的交换到前面
  30.                                 b[0][j] = b[0][j + 1];
  31.                                 b[0][j + 1] = temp1;

  32.                                 temp2 = b[1][j];        // 同时,记录的行号跟随交换
  33.                                 b[1][j] = b[1][j + 1];
  34.                                 b[1][j + 1] = temp2;
  35.                         }
  36.                 }
  37.         }
  38.        
  39.         for (i = 0;i < n;i++)                 // 输出
  40.         {
  41.                 j = b[1][i];
  42.                 m = b[0][i];
  43.                 for(k = 0;k < m;k++)
  44.                     printf("%c", a[j][k]);
  45.                 printf("\n");
  46.         }
  47.         return 0;
  48. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-28 22:08:14 | 显示全部楼层
我是刚刚看到这个帖子。你这个帖子挂了两天了,没有人来回答,朋友,你得思考一下为什么了,别人给了你帮助,不求你任何东西,只需要抬抬手,选个最佳答案而已
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表