替换字符串c ++中的子字符串

时间:2016-04-02 06:27:06

标签: c++ string replace substring boolean-expression

我想替换字符串中的子字符串, 例如:字符串是aa0_a a1_b b3_c * a0_a, 所以我想用b1_a替换子串a0_a,但我不希望aa0_a被替换。 基本上,子字符串“a0_a”(待替换)之前和之后不应该出现字母。

2 个答案:

答案 0 :(得分:3)

那是什么正则表达式擅长的。它存在于C ++ 11以后的标准库中,如果你有旧版本,你也可以使用Boost。

使用标准库版本,您可以执行(ref):

std::string result;
std::regex rx("([^A-Za-Z])a0_a[^A-Za-Z])");
result = std::regex_replace("aa0_aa1_bb3_c*a0_a", rx, "$1b1_a$2");

(注意:未经测试)

答案 1 :(得分:0)

如果循环遍历每个角色,那么就足够了。一些伪代码:

string toReplace = "a0_a";
for (int i = 0; i < myString.length; i++) {
  //filter out strings starting with another alphabetical char
  if (!isAlphabet(myString.charAt(i))) {
    //start the substring one char after the char we have verified to be not alphabetical
    if (substring(myString(i + 1, toReplace.length)).equals(toReplace)) {
      //make the replacement here
    }
  }
}

请注意,在查看子字符串时,您需要检查索引越界。