如何使用C ++库函数或STL对字符串进行排序?

时间:2013-05-28 17:24:34

标签: c++

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执行此操作。提前谢谢,

2 个答案:

答案 0 :(得分:5)

如何将result替换为std::string数组并对其进行排序:

std::string result[4];

std::sort(result, result + (sizeof(result) / sizeof(result[0])));

答案 1 :(得分: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方法可能可能更快,因为编译器有机会内联比较函数。