basic_string::replace
あなたが思っていることをしません。
basic_string::replace(it_a, it_e, ... )
との間のすべての文字を、何かに一致するものだけでなく、指定したものに置き換えます。it_a
it_e
やろうとしていることを実行する方法は 100 通りありますが、最も簡単な方法はおそらくstd::replace
from<algorithm>
を使用することです。
std::replace(mystring.begin(), mystring.end(), '_', ',');
もう 1 つの方法は、 functorstd::transform
と組み合わせて使用することです。これには、1 回のパスで複数の置換を実行できるという利点があります。std::replace
これを行う C++03 ファンクタを次に示します。
struct ReplChars
{
char operator()(char c) const
{
if( c == '_' )
return ',';
if( c == '*' )
return '.';
return c;
}
};
...そしてそれの使用:
std::transform(mystring.begin(), mystring.end(), mystring.begin(), ReplChars());
C++11 では、ファンクターの代わりにラムダを使用することでこれを減らすことができます。
std::transform(mystring.begin(), mystring.end(), mystring.begin(), [](char c)->char
{
if( c == '_' )
return ',';
if( c == '*' )
return '.';
return c;
});