在 C++ 中刪除字串中的空格

Jinku Hu 2023年1月30日 2021年4月29日
  1. 使用 erase-remove 習慣用法從 C++ 中的字串中刪除空格
  2. 在 C++ 中使用自定義函式從字串中刪除空格
在 C++ 中刪除字串中的空格

本文將演示有關如何在 C++ 中從字串中刪除空格的多種方法。

使用 erase-remove 習慣用法從 C++ 中的字串中刪除空格

C++ 中用於範圍操作的最有用的方法之一是 erase-remove 習慣用法,它包含兩個函式-std::erase(大多數 STL 容器的內建函式)和 std::remove(STL 演算法庫的一部分)。請注意,它們都連結在一起以對給定的物件執行刪除操作。std::remove 函式需要兩個迭代器來指定範圍,第三個參數列示要刪除的元素的值。在這種情況下,我們直接指定一個空格字元,但是可以指定任何字元以刪除字串中所有出現的字元。

#include <iostream>
#include <string>

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

int main(){
    string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

    cout << str << endl;

    str.erase(std::remove(str.begin(), str.end(), ' '), str.end());

    cout << str << endl;

    return EXIT_SUCCESS;
}

輸出:

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.

另一方面,使用者也可以將一元謂詞作為第三個引數傳遞給 std::remove 演算法。謂詞應為每個元素求出布林值,並且當結果為 true 時,將從範圍中刪除相應的值。因此,我們可以利用預定義的 isspace 函式來檢查多個空格字元,例如空格-" ",換行符-\n,水平製表符-\t 以及其他幾個字元。

#include <iostream>
#include <string>

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

int main(){
    string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

    cout << str << endl;

    str.erase(std::remove_if(str.begin(), str.end(), isspace), str.end());

    cout << str << endl;

    return EXIT_SUCCESS;
}

輸出:

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.

在 C++ 中使用自定義函式從字串中刪除空格

請注意,所有以前的解決方案都修改了原始的字串物件,但是有時,可能需要建立一個刪除所有空格的新字串。我們可以使用相同的 erase-remove 慣用語來實現自定義函式,該慣用語接受字串引用並返回已解析的值,以將其儲存在單獨的字串物件中。也可以修改此方法以支援另一個函式引數,該引數將指定需要刪除的字元。

#include <iostream>
#include <string>

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

string removeSpaces(const string& s) {
    string tmp(s);
    tmp.erase(std::remove(tmp.begin(), tmp.end(), ' '), tmp.end());
    return tmp;
}

int main(){
    string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

    cout << str << endl;

    string newstr = removeSpaces(str);

    cout << newstr << endl;

    return EXIT_SUCCESS;
}

輸出:

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.
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