2016-06-21 18 views
2

'a'のすべての文字を 'b'に、 'c'を 'd'に置き換えます。文字列内に複数の文字を置き換えます。

私の現在のソリューションです:それはSTDを使用して単一の機能でそれを行うことができ

std::replace(str.begin(), str.end(), 'a', 'b'); 
std::replace(str.begin(), str.end(), 'c', 'd'); 

ですか?

+0

正規表現を検索します。正規表現を使用して文字を1つのステートメントに置き換えることができます。ただし、2つのステートメントの解決策よりも複雑な場合があります。 –

答えて

2

トリッキーソリューション:

#include <algorithm> 
#include <string> 
#include <iostream> 
#include <map> 

int main() { 
    char r; //replacement 
    std::map<char, char> rs = { {'a', 'b'}, {'c', 'd'} }; 
    std::string s = "abracadabra"; 
    std::replace_if(s.begin(), s.end(), [&](char c){ return r = rs[c]; }, r); 
    std::cout << s << std::endl; 
} 
+0

いいね!ありがとう –

4

次の2つのパスが気に入らない場合、あなたは一度それを行うことができます。

std::transform(std::begin(s), std::end(s), std::begin(s), [](auto ch) { 
    switch (ch) { 
    case 'a': 
     return 'b'; 
    case 'c': 
     return 'd'; 
    } 
    return ch; 
    }); 
関連する問題