【发布时间】:2021-01-13 03:42:07
【问题描述】:
我正在尝试按照this one 等网站的一些建议对字符串数组(是的,不是向量)进行排序。这是我到目前为止写的代码,但它总是打印出this long 错误(在谷歌上没有结果)。如何解决这个问题?
#include <algorithm>
#include <cstring>
#include <iostream>
//qsort(names, n, 15, (int (*)(const void *, const void *))strcmp);
int main()
{
std::cout << "hi";
char arr[3][6];
strcpy(arr[0], "hello"), strcpy(arr[1], "hillo"), strcpy(arr[2], "hallo");
std::sort(arr, arr + 3, [](char const *lhs,
char const *rhs) { return strcmp(lhs, rhs) < 0; });
//qsort(arr, 3, 20, (int (*)(const void *, const void *))strcmp);
for (int i = 0; i < 3; ++i)
std::cout << arr[i] << '\n';
}
【问题讨论】:
-
这能回答你的问题吗? C++ String array sorting
-
考虑您要排序的数组的元素类型。数组是不可分配的,因此用于交换数组中的行(每个元素实际上是一个 char 数组)的库存交换机制将不起作用。
-
@WhozCraig 你想说的是我有一个数组数组(字符串是数组),由于数组不可分配,我们不能交换“排序”的项目吗?那么其他 SO 问题的人是如何做到的呢?
-
差不多。扔掉你的 arr 声明和 strcpy 调用,并用
const char *arr[] = { "hello", "hillo", "hallo" };替换它们,然后重试。然后考虑发生了什么变化以及为什么它现在有效。 -
@WhozCraig 会在这里使用“字符串”类型吗? (而不是做一个二维数组做一个一维数组,每个元素都具有字符串类型)