我知道我不应该使用C风格的数组,但我还是试图寻找一种方法来做到这一点.我正在尝试按字母顺序排列const char*阵列,但std::sort没有做到正确.我究竟做错了什么?
#include <iostream>
#include <algorithm>
int main() {
const char * str[5] = {"alpha", "gamma", "beta", "delta", "chi"};
int size = sizeof(str)/sizeof(*str);
std::sort(str, str + size);
for (int i = 0; i < size; i++) std::cout << str[i] << ", ";
}
Run Code Online (Sandbox Code Playgroud)
它根本不会改变阵列.我做得不对劲?
默认std::sort比较功能只是将指针(内存地址)与<运算符进行比较.它实际上并不是按字典顺序比较C字符串.您需要创建一个自定义比较函数,通过调用来按字典顺序比较字符串std::strcmp
bool compare(const char* s1, const char* s2)
{
return std::strcmp(s1, s2) < 0;
}
int main()
{
const char * str[5] = {"alpha", "gamma", "beta", "delta", "chi"};
int size = sizeof(str)/sizeof(*str);
std::sort(str, str + size, compare);
for (int i = 0; i < size; i++) std::cout << str[i] << ", ";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |