C++の文字列操作 その3


このエントリーをはてなブックマークに追加

以下、すべて

#include <iostream>
using namespace std;

と書いてあるものとする。

文字列の置換

replace()を使う。取りうる引数はいろいろあるけど、多分一番使うのは以下の例。

string str = "Today is April 19.";
str.replace(9, 5, "May"); // strのindex9から5文字分を"May"に置換
cout << str << endl; // "Today is May 19."

特定の文字列を繰り返し置換

例えば"aa bb cc aa bb cc"という文字列が与えられた時、"bb"の部分をすべて"bbbbb"と置換したいとする。以下のコードでいいのかな?

string str = "aa bb cc aa bb cc";
string from = "bb";
string to = "bbbbb";

string::size_type pos = str.find(from);
while(pos != string::npos){
    str.replace(pos, from.size(), to);
    pos = str.find(from, pos + to.size());
}

cout << str << endl;  // "aa bbbbb cc aa bbbbb cc"

特定の一文字を繰り返し置換

置換したい文字列がただ1字のみからなる場合は、std::replace()が使える。(上の例で用いているstringクラスのメンバ関数であるreplace()とは異なるので注意)

#include <iostream>
#include <string>
using namespace std;
int main(){
    string s = "abcabcabc";
    replace(s.begin(), s.end(), 'b', ' ');
    cout << s << endl; // "a ca ca c"が表示される
}