llf123456 发表于 2020-12-26 09:42:20

请大佬帮帮我

二维字符数组按长度排序--2019秋考题 (15分)
定义一个char a的二维字符数组,存储用户输入的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
//请帮我分析一下并写出您的代码,感谢!

风过无痕1989 发表于 2020-12-28 21:38:56

// 定义一个char a的二维字符数组,存储用户输入的n行m列个字符。其中n由用户输入确定,
// 1<=n<=100;而m不需要用户输入,1<=m<=100,也就是一行最多只有100个有效字符。将n行字符串按照
// 字符串长度从小到大排序,并输出排序后的结果。
#include<stdio.h>
int main()
{
        char ch, a;
        int i, j, k, n, m = 0, temp1, temp2, b;
        scanf("%d", &n);
        getchar();
        for (i = 0;i < n;i++)
        {
                while ((ch = getchar()) != '\n')
                {
                        a = ch;
                        m++;
                }
                b = m;       // 记录各行字符串的长度
                b = i;       // 记录各行字符串的行号
                m = 0;
        }
       
        for (i = 0;i < n;i++)               // 按第 0 行进行由小至大排序
        {
                for (j = 0;j < n - 1;j++)
                {
                        if (b > b)
                        {
                                temp1 = b;      // 长度小的交换到前面
                                b = b;
                                b = temp1;

                                temp2 = b;      // 同时,记录的行号跟随交换
                                b = b;
                                b = temp2;
                        }
                }
        }
       
        for (i = 0;i < n;i++)               // 输出
        {
                j = b;
                m = b;
                for(k = 0;k < m;k++)
                  printf("%c", a);
                printf("\n");
        }
        return 0;
}

风过无痕1989 发表于 2020-12-28 22:08:14

我是刚刚看到这个帖子。你这个帖子挂了两天了,没有人来回答,朋友,你得思考一下为什么了,别人给了你帮助,不求你任何东西,只需要抬抬手,选个最佳答案而已
页: [1]
查看完整版本: 请大佬帮帮我