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

Jinku Hu 2021年10月2日
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::cout; using std::cin;
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::cout; using std::cin;
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::cout; using std::cin;
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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ String