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

Jinku Hu 2021年5月16日 2020年10月14日
如何在 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::cout; using std::cin;
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::cout; using std::cin;
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::cout; using std::cin;
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
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