You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用std::sort对char*数组排序不生效的原因与解决方法求助

问题原因

你传入std::sort的arr是char*类型的数组,每个元素都是指向C风格字符串的内存指针。std::sort默认的比较逻辑是直接比较元素本身的数值大小,也就是比较这些指针指向的内存地址的高低,根本不会读取指针指向的字符串内容做对比。
比如你测试的三个字符串a、u、m如果在内存里的存储地址依次升高,那默认排序后的顺序和原顺序完全一致,和你预期的按字母序排序的结果完全不匹配,这就是排序失效的核心原因。

修复方案

方案1:保留现有C风格字符串结构,给sort添加自定义比较逻辑

修改std::sort调用代码,传入基于strcmp的比较函数直接对比字符串内容即可,修改后代码如下:

// 记得在代码顶部引入<cstring>头文件才能使用strcmp函数
std::sort(arr, arr + j, [](const char* a, const char* b) {
    // 当a的字典序小于b时返回true,会把a排在b前面
    return strcmp(a, b) < 0;
});

方案2(更推荐的C++写法):改用std::string存储姓氏

C++标准库的std::string已经内置了按内容比较的规则,不需要自定义比较器就能直接用sort排序,还能避免后续出现野指针、内存越界等C风格字符串常见问题,修改逻辑如下:

  • 将存储姓氏的数组从char* surnameArr[20]改为std::string surnameArr[20]
  • 赋值逻辑arr[j] = group[i].surname不需要修改,C风格字符串可以直接赋值给std::string
  • 原有std::sort(arr, arr + j);调用不需要做任何调整,就能正常按字母序排序

内容的提问来源于stack exchange,提问作者Terry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:09:04