如何在 C++ 中刪除字串兩邊字元

Jinku Hu 2023年10月12日
如何在 C++ 中刪除字串兩邊字元

本文將介紹如何在 C++ 中刪除字串兩邊的字元。

使用 erase()find_first_not_of()find_last_not_of() 方法實現刪除字串兩邊字元

由於標準的 C++ 庫中不包含用於字串修剪的函式,因此你需要自己實現這些函式,或者使用外部庫,如 Boost(參見字串演算法)。

在下面的例子中,我們將演示如何使用 2 個內建的 std::string 方法來構造自定義函式。首先,我們實現了 leftTrim 函式,它從字串的左側刪除作為引數傳遞的字元。我們任意指定要刪除的字元 .,/和空格。

leftTrim 函式呼叫 find_first_not_of 方法,以查詢給定引數中第一個不等於 char 的字元,並返回一個位置給找到的字元。然後,erase 方法刪除從開始直到找到的位置的字元範圍。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string& leftTrim(string& str, string& chars) {
  str.erase(0, str.find_first_not_of(chars));
  return str;
}

int main() {
  string chars_to_trim = ".,/ ";
  string text = ",.,  C++ Standard";

  cout << text << endl;
  leftTrim(text, chars_to_trim);
  cout << text << endl;

  return EXIT_SUCCESS;
}

輸出:

,.,  C++ Standard
C++ Standard

或者,我們可以使用 trimLeft 函式從字串的右側刪除給定的字元。在這種情況下,我們利用 find_last_not_of 方法,搜尋最後一個等於沒有作為引數傳遞的字元。相應地,呼叫 erase 方法,引數為 found position + 1

注意,這兩個函式都是對字串進行原地操作,而不是返回刪除字元後的副本。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string& rightTrim(string& str, string& chars) {
  str.erase(str.find_last_not_of(chars) + 1);
  return str;
}

int main() {
  string chars_to_trim = ".,/ ";
  string text = "C++ Standard /././";

  cout << text << endl;
  rightTrim(text, chars_to_trim);
  cout << text << endl;

  return EXIT_SUCCESS;
}

輸出:

C++ Standard /././
C++ Standard

最後,我們可以結合前面的函式實現 trimString 函式,刪除兩邊的字元。該函式的引數與左/右版本相同。trimString 呼叫 leftTrim,將 rigthTrim 函式的結果作為引數傳給它。你可以交換這些函式呼叫的位置而不改變程式的正確性。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string& leftTrim(string& str, string& chars) {
  str.erase(0, str.find_first_not_of(chars));
  return str;
}

string& rightTrim(string& str, string& chars) {
  str.erase(str.find_last_not_of(chars) + 1);
  return str;
}

string& trimString(string& str, string& chars) {
  return leftTrim(rightTrim(str, chars), chars);
}

int main() {
  string chars_to_trim = ".,/ ";
  string text = ",,, ..    C++ Standard  ...";

  cout << text << endl;
  trimString(text, chars_to_trim);
  cout << text << endl;

  return EXIT_SUCCESS;
}
,,, ..    C++ Standard  ...
C++ Standard
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C++ String