c++ - 通过 sort() 对 char[] 数组进行排序不起作用
问题描述
我是 C++ 新手,所以我想了解为什么以下代码不起作用:
std::sort(arr, arr + j);
for (int i = 0; i < j; i++) {
cout << arr[i] << "\n";
}
输入 I 测试:a, u, m
我期望的输出:a, m, u
但是越来越不动了a, u, m
。
我假设这是因为我将指向数组的指针放入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";
}
}
解决方案
基本问题是,与您的问题的标题相反,您不是要对char[]
数组(字符数组)进行排序,而是要对char*[]
数组(指针数组)进行排序。所以,默认的排序器(如果你使用std::sort()
没有第三个仿函数参数,你会得到什么)只会比较指针本身并按内存顺序对它们进行排序,而不考虑它们指向的字符。
如果要按词法顺序排序,则需要比较字符串:
std::sort(arr, arr+j, [](char *a, char *b)->bool { return strcmp(a, b) < 0; });
推荐阅读
- json - 状态消息:无法对嵌套资源执行请求的操作。未找到父资源“VMName”。(代码:ParentResourceNotFound)
- python - 我如何使用这个 for 循环到这个 webscraping stock 模块?
- python - 如何根据一组多对模式中两个模式的共现来修剪字符串?
- sql - LIMIT 不包含变量
- python - 有没有办法检查两个对象列表是否仅包含 Python 中相同类型的对象?
- reactjs - 在聚合物中反应 JSX?这是可能的?
- python - 如何使用作为列表的数据框值
- saml - 使用 GSuite Google Workspace 配置 SCIM 用户配置
- python - 如果不存在,如何使用 python 创建 postgres 用户/角色
- azure - kubernetes 看不到挂载的文件夹内容