0
char word[100],p[100],result[4][100];

我想按字母顺序对结果 [4][100] 进行排序。例如

result[0]="adbs";
result[1]="aacs";
result[2]="abef";
result[3]="abbm";

排序后将是:

result[0]="aacs";
result[1]="abbm";
result[2]="abbm";
result[3]="adbs";

如何使用库函数或 STL 做到这一点。提前致谢,

4

2 回答 2

5

如何制作result一个数组std::string而不是排序:

std::string result[4];

std::sort(result, result + (sizeof(result) / sizeof(result[0])));
于 2013-05-28T17:27:09.567 回答
1

Mark B 的答案是 C++ 做事的方式。

如果您坚持使用原始字符数组,那么使用 C 风格的方法可能会更好。

#include <cstddef>
#include <cstdlib>
#include <cstring>
#include <iostream>

typedef int (*Comparator)(const void *, const void *);

int main() {
  const std::size_t cWords = 4;
  char result[cWords][100] = { "az", "ax", "aa", "ab" };
  std::qsort(result, cWords, sizeof(result[0]),
             reinterpret_cast<Comparator>(std::strcmp));
  for (std::size_t i = 0; i < cWords; ++i) {
    std::cout << result[i] << std::endl;
  }
  return 0;
}

方法基本相同,但细节不同。

qsort 采用 void 指针、类型大小和一个比较函数(也使用 void 指针)来实现对任何类型的数据类型的排序。

std::sort 使用模板来处理特定于类型的细节,因此您可以在更高的抽象级别上工作并获得更好的类型安全性。但是当你没有真正的类型而只有一个固定长度的字符数组时,这可能更难做到。std::sort 方法可能更快,因为编译器有机会内联比较函数。

于 2013-05-28T18:08:53.217 回答