C++_ 文字置換 ( ソース解読 )

前書いたまとめ。

 hoga を fuga に変更。

    std::string str = "今日は hoga だった。明日も hoga だ。";
    std::string from = "hoga";
    std::string to = "fuga";

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

    std::cout << str << std::endl;

    // f:id:koshinRan:20171129182641p:plain ← が出力。

 

std::string::size_type pos(str.find(from));

 std::string::size_type pos = str.find(from);
と同様。多分。
pos には、「今日は hogga だった。」の「 h 」のインデックス 4 が格納
第二引数 0 が省略。

 

str.replace(pos, from.size(), to);

str の インデックス 4 の位置から hoga文字数分を fuga に変更

 

pos = str.find(from, pos + to.size())

 「だ」 の位置から 「 hoga 」を検索。
位置を見つけたならば、 pos にそのインデックスが格納され、
見つからなければstd::string::npos が返される。

 

 

Memo

・ str.size() で文字列の長さを返す。
     length()も同じ機能だが、これはsize() の値を返しているだけ。

・char 型同士の置換であれば replace 関数のみで全置換可能。

    std::string str = "a-b-c";
    std::replace(str.begin(), str.end(), '-', '='); //a=b=c

 

こちらから。
http://marycore.jp/prog/cpp/std-string-replace-first-all/
https://so-zou.jp/software/tech/programming/cpp/standard-library/stl/element/container/string.htm

 

以上。