C++で文字列の一部を別の文字列に置き換える方法を解説
この記事では、C++において文字列の一部を別の文字列に置き換える方法を詳しく解説します。C++では文字列の置換が非常に簡単に行えます。標準ライブラリには string.replace() という便利な関数が用意されています。
replace()関数の基本的な仕組み
replace() 関数は、指定した位置から始まる指定した長さの部分文字列を、新しい文字列で置き換えます。ただし、この関数単体では最初に見つかった1箇所のみが置き換えられる点に注意が必要です。文字列内に存在するすべての一致箇所を置き換えるには、ループ処理と組み合わせる必要があります。
replace() 関数が受け取る引数は以下の3つです。
- 置換を開始するインデックス位置
- 置き換え対象となる文字列の長さ
- 置き換え後の新しい文字列
入力と出力の例
入力: 文字列 "Hello...Here all Hello will be replaced" と、置換用の文字列 "ABCDE" 出力: "ABCDE...Here all ABCDE will be replaced"
アルゴリズム
すべての一致箇所を置き換えるための手順は以下の通りです。
- 元の文字列、置き換え対象の文字列(検索文字列)、および置換後の文字列を取得します。
- 検索文字列が元の文字列内に存在する限り、以下を繰り返します。
- 見つかった位置を、指定された文字列で置き換えます。
- すべての置換が完了した文字列を返します。
サンプルコード
#include<iostream>
using namespace std;
main() {
int index;
string my_str = "Hello...Here all Hello will be replaced";
string sub_str = "ABCDE";
cout << "初期文字列 :" << my_str << endl;
// すべての「Hello」を「ABCDE」に置き換える
while((index = my_str.find("Hello")) != string::npos) { // 見つかった各位置に対して
my_str.replace(index, sub_str.length(), sub_str); // その位置から置換
}
cout << "最終文字列 :" << my_str;
}コードのポイント
このコードで重要なのは find() メソッドと string::npos の使い方です。find() は検索文字列が見つかった位置(インデックス)を返し、見つからなかった場合は特殊な値 string::npos を返します。この性質を利用して、whileループの継続条件としています。ループ内で replace() を呼び出すことで、該当箇所が順番にすべて置き換えられていきます。
実行結果
初期文字列 :Hello...Here all Hello will be replaced 最終文字列 :ABCDE...Here all ABCDE will be replaced
まとめ
C++での文字列置換は、find() と replace() を組み合わせることで簡単に実装できます。単一の置換なら replace() だけで十分ですが、文字列内のすべての一致箇所を置き換えたい場合は、今回のようにループ処理を使うことが基本のパターンとなります。ぜひ実際にコードを動かして、動作を確認してみてください。
-
C++で文字列をトークン化(分割)する2つの方法を解説
文字列のトークン化(分割)とは、1つの文字列を区切り文字(スペースやカンマなど)を基準に、複数の部分文字列へ分割する処理のことです。C++では、標準ライブラリだけでもいくつかの方法で実現できます。本記事では、代表的な2つの方法をサンプルコード付きで紹介します。方法1:stringstreamを使って空白で分割する1つ目の方法は、stringstreamを使ってスペースで区切られた単語を順に読み取る方法です。この方法はやや制限がありますが、適切なチェックを加えれば十分に目的を果たすことができます。サンプルコード#include <vector> #include <string
-
Pythonで文字列内のすべての出現箇所を別の文字列に置換する方法
str.replace()メソッドを使う方法Pythonの文字列クラス(str)には、replaceメソッドが標準で用意されています。このメソッドは「置換したい文字列」と「置換後の文字列」を引数として受け取り、文字列オブジェクトに対して呼び出すことで、該当するすべての出現箇所を一括して置き換えることができます。たとえば、次のように呼び出すと、文字列中のすべての「no」が「yes」に置き換えられます。>>> no one knows how.replace(no, yes) yes one kyesws how >>> chihuahua.replace(hu