按特定顺序对argv进行排序

时间:2016-04-25 10:48:11

标签: c sorting pointers

我正在尝试按字母顺序对所有参数argv进行排序,但我不明白为什么当我输入3个或更多参数时我的代码不起作用。

#include <stdio.h>
#include <stdlib.h>
void swap(int argc, char argv[]);

int main(int argc, char **argv) {
    swap(argc, argv);

    system("PAUSE");
    return 0;
}
void swap(int argc, char argv[]) {
    int i, j;
    char temp;

    for (i = 0; i < argc; i++)
    {
        for (j = 0; j < argc; j++)
        {
            if (strcmp(*(argv + j), *(argv + j + 1)) > 0)
            {
                temp = *(argv + j);
                *(argv + j) = *(argv + j + 1);
                *(argv + j + 1) = temp;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您正在向<%#= render @submissions %> #<%# %> This is the way to comment embedded ruby code 传递一个char数组。

因此,当您将swap的元素与argv函数进行比较时,您正在比较char而不是字符串(char数组)。

所以你不应该调用strcmp来比较char。 (strcmp找不到'\ 0'符号,因此引发错误。)

您可以将char与'&gt;'进行比较操作

swap

编辑:

如果你想使用字符串。你应该在C中研究记忆中的rappresentation。

C memory rappresentation

所以你的错误发生'原因(argv + j)不是j-string。

请研究一下。

答案 1 :(得分:-1)

我优化了您的代码以有效地对argv[]数组进行排序;

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

void swap(int argc, char *argv[]);

int main(int argc, char **argv)
{
    swap(argc, argv);

    int n;
    for (n = 1; n < argc; n++) {
        printf("%s\n", argv[n]);
    }
    //system("PAUSE");
    return 0;
}
void swap(int argc, char *argv[])
{
    int i, j;
    char *temp;

    for (i = 0; i < argc; i++)
    {
        for (j = 1; j < (argc - i - 1); j++)
        {
            if (strcmp(argv[j], argv[j + 1]) > 0)
            {
                temp = argv[j];
                argv[j] = argv[j + 1];
                argv[j + 1] = temp;
            }
        }
    }
}