2016-06-21 5 views
2

Я хочу заменить все вхождения 'a' 'b' и 'c' на 'd'.Заменить несколько пар символов в строке

Мое текущее решение:

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

Можно ли это сделать в одной функции с помощью зЬй?

+0

Посмотрите регулярные выражения. Вы можете использовать регулярные выражения для замены букв одним утверждением. Однако это может быть сложнее, чем ваше решение для 2-х слов. –

ответ

2

Tricky решение:

#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

Если вам не нравится два прохода, вы можете сделать это один раз:

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; 
    });