我想替换字符串中的子字符串, 例如:字符串是aa0_a a1_b b3_c * a0_a, 所以我想用b1_a替换子串a0_a,但我不希望aa0_a被替换。 基本上,子字符串“a0_a”(待替换)之前和之后不应该出现字母。
答案 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
}
}
}
请注意,在查看子字符串时,您需要检查索引越界。