使用 std::sort 对 C 字符串数组进行排序
Using std::sort to sort an array of C strings
>我正在尝试使用std::sort
对C字符串数组进行排序。这是我所做的:
const char *tab[5];
//then fill up the tab
sort(tab, tab+5);
这似乎行不通。我也尝试使用 sort(tab, tab+5, strcmp)
,它有效,但是当我将其放入函数中时,数组保持不变。排序功能:
void sortfunc (const char *tab[], int n){
filltab(tab, n); //n is the ammount of strings
sort(tab, tab+n, strcmp);
}
我的代码有什么问题?
std::sort:如果第一个参数小于(即在第二个参数之前排序),则它期望的比较对象必须返回 true。
strcmp,您提供的函数具有另一个返回约定:
- 如果 lhs 小于 rhs,则为负值。
- 如果 LHS 等于 RHS,则为 0。
- 如果 lhs 大于 rhs,则为正值。
(此处 LHS 和 RHS 参考左手操作员和右手操作员)
所以你必须围绕strcmp创建自己的包装函数。
如果你可以使用 c++11 并且你可以真正使用 c++(即 std::string
和std::vector
)您可以使用其他很酷的技巧,例如lambdas。
经典解决方案:
bool cmp(char const *lhs, char const *rhs) {
return strcmp(lhs, rhs) < 0;
}
std::sort(tab, tab + n, cmp);
λ解决方案:
std::sort(tab, tab + n, [](char const *lhs,
char const *rhs) { return strcmp(lhs, rhs) < 0; });
真正的C++解决方案
std::vector<std::string> v = ...;
std::sort(std::begin(v), std::end(b));
我已经让它工作了。就像@bolov和@Svalorzen所说,我必须编写一个返回true
或false
的bool
函数,而不是像strcmp()
那样返回-1,0,1。如果将来有人需要它,就是这样:
bool cmp(const char *str1, const char *str2){
if(strcmp(str1, str2)<0) return true;
else return false;
}
sort(tab, tab+5, cmp);
感谢您的帮助。
相关文章:
- 使用 jsoncpp 解析 json 数组字符串
- C++ 对象数组字符串输入在控制台上不起作用
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 无法区分 JSON 对象/数组/字符串
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何使用数组字符串进行输入验证
- (C++) 打印字符数组字符串的单词时出现问题
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- C 函数反转字符数组字符串
- 如何在 c++ 中创建数组(字符串 [] )的向量
- 如何返回数组字符串的指针
- char数组字符串混淆
- 如何从字符数组字符串中提取空格
- 是否可以将 Bitset<8> 的值复制到数组字符串而不转换它们?
- C++数组字符串函数
- 如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
- visual将音频文件存储到数组/字符串流C++中
- c++在char数组(字符串)上将what替换为
- 将数组字符串转换为intger c++(初学者)
- 需要设置数组字符串长度,使其恰好为13