C++ 中的 std::string::erase 函式

Jinku Hu 2023年10月12日
C++ 中的 std::string::erase 函式

本文將演示如何在 C++ 中使用 std::string::erase 函式從字串中刪除字元。

使用 std::string::erase 函式刪除字串中的指定字元

erase 是一個 std::string 成員函式,可用於從字串中刪除給定的字元。它有三個過載,我們將在下面的例子中討論每一個。

第一個過載接受兩個 size_type 型別的引數,分別表示 indexcount。此版本將嘗試擦除從 index 位置開始的 count 個字元,但在某些情況下,給定索引後剩餘的字元可能更少,因此該函式被稱為刪除 min(count, size() - index) 字元。erase 的第一個過載返回 *this 值。

這兩個引數都有預設值,當我們將單個引數值傳遞給函式時,結果可能有點違反直覺。事實上,給定的值被解釋為 index 引數,而 count 被假定為 std::npos。因此,這會導致在給定位置之後擦除字串的其餘部分。

下面的程式碼片段顯示了類似的場景 - 一個使用 find 成員函式,另一個 - 通過顯式傳遞索引值。

#include <iostream>
#include <string>

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

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(0, 6);
  cout << text << endl;

  text.erase(text.find('c'));
  cout << text << endl;

  text.erase(2);
  cout << text << endl;

  return EXIT_SUCCESS;
}

輸出:

ipsum dolor sit amet, consectetur adipiscing elit.
ipsum dolor sit amet,
ip

該函式的第二個過載接受表示要擦除的字元位置的單個引數。這個引數應該是對應的迭代器型別;否則,它將呼叫第一個過載。我們可以將這個版本的函式與 std::find 演算法結合使用,從字串中刪除給定字元的第一次出現。否則,我們可以使用 beginend 迭代器傳遞字元的相對位置。

#include <iostream>
#include <string>

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

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(std::find(text.begin(), text.end(), ','));
  cout << text << endl;

  text.erase(text.end() - 5);
  cout << text << endl;

  return EXIT_SUCCESS;
}

輸出:

Lorem ipsum dolor sit amet consectetur adipiscing elit.
Lorem ipsum dolor sit amet consectetur adipiscing lit.

最後,我們有第三個過載,它接受兩個迭代器作為引數並刪除相應範圍內的所有字元。以下程式碼示例展示瞭如何刪除字串中除初始字元以外的所有字元。

#include <iostream>
#include <string>

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

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(text.begin() + 1, text.end());
  cout << text << endl;

  return EXIT_SUCCESS;
}

輸出:

L
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C++ String