C++ 中的 std::string::erase 函式
Jinku Hu
2023年10月12日
本文將演示如何在 C++ 中使用 std::string::erase
函式從字串中刪除字元。
使用 std::string::erase
函式刪除字串中的指定字元
erase
是一個 std::string
成員函式,可用於從字串中刪除給定的字元。它有三個過載,我們將在下面的例子中討論每一個。
第一個過載接受兩個 size_type
型別的引數,分別表示 index
和 count
。此版本將嘗試擦除從 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
演算法結合使用,從字串中刪除給定字元的第一次出現。否則,我們可以使用 begin
或 end
迭代器傳遞字元的相對位置。
#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