【问题标题】:Sorting of char[] array via sort() does not work通过 sort() 对 char[] 数组进行排序不起作用
【发布时间】:2021-10-28 16:44:33
【问题描述】:

我是 C++ 新手,所以我想了解为什么以下代码不起作用:

std::sort(arr, arr + j);
for (int i = 0; i < j; i++) {
    cout << arr[i] << "\n";
}

输入我测试:a, u, m

我期望的输出:a, m, u

但还是不动a, u, m

Code in Studio

我假设这是因为我将一个指向数组的指针放入了sort()(那部分代码在函数中)?但是我在这里阅读了很多关于如何对数组的指针进行排序的问题并且真的被卡住了。请有人以一种让初学者容易理解的方式解释为什么我的代码不起作用,以及如何解决它?

更新

struct Phones {
    char surname[50];
    int yearWhenPhoneRegistred;
    int phoneNumber;
};
Phones group[20];

void findDataByYear(struct Phones group[], int year, char *arr[]);

int main {
    int year = 0;
    char* surnameArr[20] = {};
    cout <<"Please, type the year value to apply the sorting: \n";
    cin >> year;
    findDataByYear(group, year, surnameArr);
    return 0;
}

void findDataByYear(struct Phones group[], int year, char *arr[]) {
    int j = 0;
    for (int i = 0; i < 20; i++) {
        if (group[i].yearWhenPhoneRegistred > year) {
            arr[j] = group[i].surname;
            j++;
        }
    }

    std::sort(arr, arr + j);
    printf("      Surname      |\n-------------------\n");
    for (int i = 0; i < j; i++) {
        cout << arr[i] << "\n";
    }
}

【问题讨论】:

标签: c++ arrays sorting


【解决方案1】:

基本问题是,与您的问题的标题相反,您不是要对 char[] 数组(字符数组)进行排序,而是要对 char*[] 数组(一个数组的指针)。所以,默认的排序器(如果你使用 std::sort() 没有第三个仿函数参数,你会得到什么)只会比较指针本身并按内存顺序对它们进行排序,而不考虑它们指向的字符。

如果要按词法排序,则需要比较字符串:

std::sort(arr, arr+j, [](char *a, char *b)->bool { return strcmp(a, b) < 0; });

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多