C++ で文字列からスペースを削除する

胡金庫 2023年10月12日
  1. C++ で文字列からスペースを削除するには erase-remove イディオムを使用する
  2. C++ でカスタム関数を使用して文字列からスペースを削除する
C++ で文字列からスペースを削除する

この記事では、C++ で文字列からスペースを削除する方法に関する複数の方法を示します。

C++ で文字列からスペースを削除するには erase-remove イディオムを使用する

C++ で範囲を操作するための最も便利な方法の 1つは、2つの関数で構成される erase-remove イディオムです。STL アルゴリズムライブラリの)。指定されたオブジェクトに対して削除操作を実行するために、両方がチェーンされていることに注意してください。std::remove 関数は、範囲を指定するために 2つのイテレータを取り、削除する要素の値を示すために 3 番目の引数を取ります。この場合、スペース文字を直接指定しますが、任意の文字を指定して、文字列内のすべての出現箇所を削除できます。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
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 アルゴリズムの 3 番目の引数として単項述語を渡すこともできます。述語は、すべての要素について bool 値に評価される必要があり、結果が true の場合、対応する値は範囲から削除されます。したがって、スペース-" "、改行-\n、水平タブ-\t などの複数の空白文字をチェックする定義済みの isspace 関数を利用できます。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
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::cin;
using std::cout;
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.
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ String