2016-06-21 2 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

까다로운 솔루션 :

#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; 
    }); 
관련 문제