c语言 输出单词的顺序

输出单词的顺序

排序规则

1:按长度排序,长的靠前

2:如果长度相等,则按字典序排序

3:规定所有的大写的字母的字典序都在在小写的前面(跟ASIC码一样)

输入

先输入测试数据的组数n,然后接下来是n组测试数据,每组测试数据包括一个整数m,接下来是m行字符串(长度小于100)!!
输出

按给定的规则输出结果,注意格式是先输出Case i:

样例输入

2
3
Bb
aa
xxx
4
zzzz
xxx
bb
aa

样例输出

Case 1:
xxx
Bb
aa
Case 2:
zzzz
xxx
aa
bb


#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
    int group_number = 0;
    scanf("%d", &group_number);

    char*** input;
    input = new char**[group_number];
    int** order;
    order = new int*[group_number];

    int* sample_number;
    sample_number = new int[group_number];
    
    for (int i = 0; i < group_number; i++)
    {
        scanf("%d", &sample_number[i]);

        input[i] = new char*[sample_number[i]];
        for (int j = 0; j < sample_number[i]; j++)
        {
            input[i][j] = new char[100];
        }
        for (int j = 0; j < sample_number[i]; j++)
        {
            scanf("%s", input[i][j]);
        }
        order[i] = new int[sample_number[i]];
        for (int j = 0; j < sample_number[i]; j++)
        {
            order[i][j] = j;
        }
        //按照预定的规则进行排序
        for (int j = 0; j < sample_number[i] - 1; j++)
        {
            bool change = false;
            for (int k = sample_number[i] - 1; k >= 1 + j; k--)
            {
                if (strlen(input[i][k]) > strlen(input[i][k - 1]))
                {
                    int temp;
                    temp = order[i][k];
                    order[i][k] = order[i][k - 1];
                    order[i][k - 1] = temp;
                }
                else if (strlen(input[i][k]) == strlen(input[i][k - 1]))
                {
                    int len = strlen(input[i][k]);
                    bool equal_change = false;
                    for (int q = 0; q < len; q++)
                    {
                        if (input[i][k][q] < input[i][k - 1][q])
                        {
                            equal_change = true;
                            break;
                        }
                    }
                    if (equal_change)
                    {
                        int temp;
                        temp = order[i][k];
                        order[i][k] = order[i][k - 1];
                        order[i][k - 1] = temp;
                    }
                }

            }
            if (!change)
            {
                break;
            }
        }
    }
    
    //输出结果
    for (int i = 0; i < group_number;i++)
    {
        printf("Case %d:\n", i + 1);
        for (int j = 0; j < sample_number[i]; j++)
        {
            printf("%s\n", input[i][order[i][j]]);
        }

        delete []order[i];
        for (int j = 0; j < sample_number[i]; j++)
        {
            delete []input[i][j];
        }
        delete []input[i];
    }

    delete []input;
    delete []order;
    delete []sample_number;
    
}

追问

这道题可以不用指针么 刚刚学C 还没看懂指针

追答

不用指针当然也是可以的,但是程序的实用性会受到很大的影响。

追问

那不用指针 怎么做呢?

追答

见附件,这样的话输入的数据个数很受限

温馨提示:答案为网友推荐,仅供参考
相似回答