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
