You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用正则表达式替换字符串中单独出现指定字符的方案咨询

C++替换字符串中单独出现的'1'实现方案

原代码问题分析

你写的正则(1){1}仅能匹配单个'1'字符,不会判断该'1'前后是否存在其他相邻的'1',因此会把连续出现的'1'也逐个替换,无法满足需求。

正确实现方案

方案1:正则表达式实现

使用负向零宽断言限定匹配前后都不是'1'的单独'1',正则规则为(?<!1)1(?!1):

  • (?<!1):负向后行断言,要求当前位置前一个字符不能是'1'
  • 1:匹配目标字符'1'
  • (?!1):负向前行断言,要求当前位置后一个字符不能是'1'

完整代码示例:

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::string S = "-0001011101";
    std::regex b1(R"((?<!1)1(?!1))");
    std::string S1 = std::regex_replace(S, b1, "2");
    std::cout << S1 << std::endl; // 输出结果为 -0002011102
    return 0;
}

方案2:遍历实现(性能更优)

如果对性能要求较高,可直接遍历字符串判断相邻字符,无需引入正则库:

#include <iostream>
#include <string>

int main() {
    std::string S = "-0001011101";
    int len = S.size();
    for (int i = 0; i < len; ++i) {
        if (S[i] == '1') {
            bool single = true;
            if (i > 0 && S[i-1] == '1') single = false;
            if (i < len - 1 && S[i+1] == '1') single = false;
            if (single) S[i] = '2';
        }
    }
    std::cout << S << std::endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者psaraj12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:04