替换字符串中的多对字符

时间:2016-06-21 18:43:51

标签: c++ string c++11 std

我想替换所有出现的' a'与''和' c'用' d'。

我目前的解决方案是:

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

是否可以使用std?

在单个函数中执行此操作

2 个答案:

答案 0 :(得分:6)

如果你不喜欢两次传球,你可以做一次:

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

答案 1 :(得分: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;
}