
プログラミングをしていると、文字列の一部を別の文字列に置き換えたい場面がよくあります。C++では、std::stringクラスと<regex>(正規表現)ライブラリを組み合わせることで、柔軟な文字列の置換処理が可能です。
今回は、正規表現を使った文字列置換の基本的な方法について、以下のコードを使って詳しく解説していきます。
使用コードの紹介
#include <bits/stdc++.h>
using namespace std;
int main () {
string s;
getline(cin, s);
regex pattern("False");
string replaced = regex_replace(s, pattern, "True");
cout << replaced << endl;
}
このコードの解説
1. #include <bits/stdc++.h>
このヘッダーは、競技プログラミングでよく使われる便利な1行で、C++標準ライブラリのほとんどを一度にインクルードします。特に、<iostream>, <string>, <regex> などが含まれています。
※実際の開発では、必要なヘッダーだけを明示的に書くことをおすすめします。
2. string s; getline(cin, s);
getline(cin, s)は、標準入力から1行分の文字列を読み取ります。- 例: 入力として
False and Falseを与えると、変数sには"False and False"が格納されます。
3. regex pattern("False");
- ここでは、正規表現(
std::regex)を使って、「False」という文字列パターンを作成しています。 patternは"False"にマッチする部分を指します。
4. regex_replace(s, pattern, "True");
- この関数は、
sという文字列の中で、pattern("False")に一致するすべての部分を"True"に置換します。 - 例:
"False and False"→"True and True"
5. cout << replaced << endl;
- 置換された結果の文字列を画面に出力します。
実行例
入力:
False and False
出力:
True and True
補足:正規表現の強み
このコードでは単純な "False" の置換を行っていますが、std::regex を使うことで、次のような高度なパターンマッチも可能になります。
regex pattern("[0-9]+"); // 数字の連続にマッチ
regex pattern("^abc"); // 先頭が "abc" にマッチまとめ
C++で文字列を置換する方法は複数ありますが、正規表現を使うことで、より柔軟かつ強力な置換が可能になります。
特に、パターンに基づいた置換や、複雑なルールに従った文字列の操作が必要な場合には、std::regex_replace は非常に有効です。
C++には様々な解決方法が存在しますがコードが長くなってしまったり、複雑になる解決方法も少なくありません。
paizaやAtcoderの問題を解く時に正規表現を使うとシンプルに書く事ができるのでオススメです!
こんなときにおすすめ:
- 単語の一括置換
- 数値や特定のパターンだけを置換
- テキスト整形やログ処理 など