C 中按长度对单词进行排序

问题描述 投票:0回答:1

我正在尝试使用 C 中的 argv 从命令行读取单词,然后根据它们的长度按降序对它们进行排序。然而,我的排序算法产生了意想不到的输出。

我使用的代码如下:

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

int main(int argc, char *argv[]) {

    for (int i = 1; i < argc - 1; i++) {
        for (int j = 1; j < argc - i - 1; j++) {
            if (strlen(argv[j]) < strlen(argv[j + 1])) {
                char temp_word[20];
                strcpy(temp_word, argv[j]);
                strcpy(argv[j], argv[j + 1]);
                strcpy(argv[j + 1], temp_word);
            }
        }
    }

    puts("\n");
    for (int i = 1; i < argc; i++) {
        printf("%s ", argv[i]);
    }

    return 0;
}
gcc test.c -o test
./test I put this words


puwordI wordI I  % 

我使用 argv 从命令行读取单词,然后尝试按长度对它们进行排序。不幸的是,输出已损坏。我怀疑我的排序逻辑或处理命令行参数的方式可能存在问题。有人可以检查我的代码并提供有关如何在从 argv 读取单词时按长度正确排序单词的指导吗?

任何帮助或建议将不胜感激。

谢谢!

c string algorithm sorting command-line-arguments
1个回答
0
投票

您不应该修改参数字符串的内容,但您可以修改

argv
中的指针。因此,您应该只交换指针而不是字符串。

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

int main(int argc, char *argv[]) {
    for (int i = 1; i < argc; i++) {
        for (int j = 1; j < argc - i - 1; j++) {
            if (strlen(argv[j]) < strlen(argv[j + 1])) {
                char *temp = argv[j];
                argv[j] = argv[j + 1];
                argv[j + 1] = temp;
            }
        }
    }

    for (int i = 1; i < argc; i++) {
        printf("%s ", argv[i]);
    }
    printf("\n");

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.