C++ で文字列を消去する

胡金庫 2023年10月12日
C++ で文字列を消去する

この記事では、std::string::erase 関数を使用して C++ で文字列から文字を削除する方法を示します。

std::string::erase 関数を使用して、文字列内の指定された文字を削除する

erasestd::string メンバー関数であり、文字列から指定された文字を削除するために使用できます。これには 3つのオーバーロードがあり、それぞれについて次の例で説明します。

最初のオーバーロードは、indexcount を示す size_type タイプの 2つの引数を受け入れます。このバージョンでは、index の位置から始まる count 文字数を消去しようとしますが、シナリオによっては、指定されたインデックスの後に残っている文字が少なくなる可能性があるため、関数は min(count, size()-インデックス) 文字。erase の最初のオーバーロードは*this 値を返します。

これらのパラメーターは両方ともデフォルト値を持っており、単一の引数値を関数に渡すと、結果は少し直感に反する可能性があります。実際、指定された値は index パラメーターとして解釈され、countstd::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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ String