在 C++ 中按字母順序對字串排序

Jinku Hu 2023年10月12日
  1. 使用 std::sort 演算法在 C++ 中按字母順序對字串進行排序
  2. 使用 std::sort 演算法在 C++ 中按長度對字串排序
在 C++ 中按字母順序對字串排序

本文將演示如何在 C++ 中按字母順序對字串排序的多種方法。

使用 std::sort 演算法在 C++ 中按字母順序對字串進行排序

std::sort 是 STL 演算法庫的一部分,它為基於範圍的結構實現了通用的排序方法。該函式通常使用 operator< 對給定序列進行排序;因此,可以使用此預設行為按字母順序對字串物件進行排序。std::sort 只接受範圍說明符-第一個和最後一個元素迭代器。請注意,不能保證保留相等元素的順序。

在下面的示例中,我們演示了基本方案,其中對字串的向量進行了排序並列印到了 cout 流中。

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end());

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

輸出:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; all; and; execution; implementation; or; parameter; participate; raid; requirements; states; the;

另外,我們可以在 std::sort 方法中使用可選的第三個引數來指定確切的比較函式。在這種情況下,我們重新實現了前面的程式碼示例,以比較字串中的最後一個字母並對其進行相應的排序。注意比較函式應該有兩個引數,並返回一個 bool 值。下一個示例使用 lambda 表示式作為比較函式,並利用 back 內建函式檢索字串的最後一個字母。

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end(),
       [](string &s1, string &s2) { return s1.back() < s2.back(); });

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

輸出:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; raid; and; the; participate; all; implementation; execution; parameter; or; states; requirements;

使用 std::sort 演算法在 C++ 中按長度對字串排序

對字串向量進行排序的另一種有用情況是按其長度排序。我們將使用與前面的示例程式碼相同的 lambda 函式結構,只是將 back 方法更改為 size。不過請注意,該比較函式一定不能修改傳遞給它的物件。

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end(),
       [](string &s1, string &s2) { return s1.size() < s2.size(); });

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

輸出:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; or; all; the; and; raid; states; parameter; execution; participate; requirements; implementation;
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Sorting