C++ で文字列を消去する
この記事では、std::string::erase
関数を使用して C++ で文字列から文字を削除する方法を示します。
std::string::erase
関数を使用して、文字列内の指定された文字を削除する
erase
は std::string
メンバー関数であり、文字列から指定された文字を削除するために使用できます。これには 3つのオーバーロードがあり、それぞれについて次の例で説明します。
最初のオーバーロードは、index
と count
を示す size_type
タイプの 2つの引数を受け入れます。このバージョンでは、index
の位置から始まる count
文字数を消去しようとしますが、シナリオによっては、指定されたインデックスの後に残っている文字が少なくなる可能性があるため、関数は min(count, size()-インデックス)
文字。erase
の最初のオーバーロードは*this
値を返します。
これらのパラメーターは両方ともデフォルト値を持っており、単一の引数値を関数に渡すと、結果は少し直感に反する可能性があります。実際、指定された値は index
パラメーターとして解釈され、count
は std::npos
と見なされます。その結果、これにより、指定された位置の後の文字列の残りの部分が消去されます。
次のコードスニペットは、インデックス値を明示的に渡すことによる同様のシナリオを示しています。1つは find
メンバー関数を使用し、もう 1つは使用します。
#include <iostream>
#include <string>
using std::cin;
using std::cout;
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
関数の 2 番目のオーバーロードは、消去する文字の位置を表す単一のパラメーターを受け入れます。この引数は、対応するイテレータタイプである必要があります。それ以外の場合は、最初のオーバーロードが呼び出されます。このバージョンの関数を std::find
アルゴリズムと一緒に使用して、指定された文字の最初の出現を文字列から削除できます。それ以外の場合は、begin
または end
イテレータを使用して文字の相対位置を渡すことができます。
#include <iostream>
#include <string>
using std::cin;
using std::cout;
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.
最後に、2つのイテレーターをパラメーターとして受け取り、対応する範囲内のすべての文字を削除する 3 番目のオーバーロードがあります。次のコードサンプルは、最初の文字を除く文字列内のすべての文字を削除する方法を示しています。
#include <iostream>
#include <string>
using std::cin;
using std::cout;
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