C++ で文字列からスペースを削除する
胡金庫
2023年10月12日
この記事では、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.
著者: 胡金庫