C++ で文字列の一部を置き換える方法

胡金庫 2023年10月12日
  1. C++ で文字列の一部を置換するには replace() メソッドを使用する
  2. C++ で文字列の一部を置換するカスタム関数を使用する
  3. C++ で文字列の一部を置換するには regex_replace() メソッドを用いる
C++ で文字列の一部を置き換える方法

この記事では、C++ で文字列の一部を置換する方法について複数のメソッドを示します。

C++ で文字列の一部を置換するには replace() メソッドを使用する

replacestd::string クラスの組み込みメソッドであり、文字列オブジェクトの指定された部分を置換する機能を提供します。この関数の最初のパラメータは、与えられた文字列が挿入される開始文字を示します。次のパラメータは、新しい文字列で置き換えられる部分文字列の長さを指定します。最後に、新しい文字列が第 3 引数として渡されます。replace メソッドは呼び出された文字列オブジェクトを変更することに注意してください。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string input = "Order $_";
  string order = "#1190921";

  cout << input << endl;

  input.replace(input.find("$_"), 2, order);

  cout << input << endl;

  return EXIT_SUCCESS;
}

出力:

Order $_
Order #1190921

C++ で文字列の一部を置換するカスタム関数を使用する

別の方法として、置換を行う代わりに別の文字列オブジェクトを返すカスタム関数を作成することもできます。この関数は string 変数への 3つの参照を受け取ります: 最初の文字列は修正用、2 番目の部分文字列は置換用、3 番目の文字列は挿入用です。ここで、この関数が構築された文字列を値で返すことに注意してください。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string Replace(string& str, const string& sub, const string& mod) {
  string tmp(str);
  tmp.replace(tmp.find(sub), mod.length(), mod);
  return tmp;
}

int main() {
  string input = "Order $_";
  string order = "#1190921";

  cout << input << endl;

  string output = Replace(input, "$_", order);

  cout << output << endl;

  return EXIT_SUCCESS;
}

出力:

Order $_
Order #1190921

C++ で文字列の一部を置換するには regex_replace() メソッドを用いる

この問題を解決するために利用できるもう一つの便利な方法は regex_replace を利用することです。このメソッドは regex を用いて与えられた文字列の文字をマッチさせ、渡された文字列でシーケンスを置換します。次の例では、regex_replace は新しい文字列オブジェクトを生成します。

#include <iostream>
#include <regex>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::regex;
using std::regex_replace;
using std::string;

int main() {
  string input = "Order $_";
  string order = "#1190921";

  cout << input << endl;

  string output = regex_replace(input, regex("\\$_"), order);

  cout << output << endl;

  return EXIT_SUCCESS;
}

出力:

Order $_
Order #1190921
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ String