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

C++实现字符串查找替换功能仅首次匹配生效该如何修复

错误原因
  • std::string::replace 方法参数使用错误。该方法前两个入参的含义为「替换起始下标」和「需要替换的字符长度」,你代码中传入的第二个参数是i + x,误将子串结束下标当做长度传入,会导致第一次替换就修改了超出目标子串长度的内容,破坏原字符串结构,后续查找自然无法匹配到剩余的目标子串。
  • 替换完成后下一次查找的起始位置设置错误。你仅执行了i++操作,正确逻辑应该是跳过刚替换完成的内容,从替换字符串的末尾开始下一次查找,否则如果替换内容包含目标子串会出现重复替换,也可能出现漏匹配的问题。
  • 额外注意:std::string的下标、长度、find方法返回值均为无符号size_t类型,使用int接收会存在类型不匹配的潜在风险。
修复后的完整代码
#include <iostream>
#include <string>
using namespace std;

string Find_Replace(string str, string substr, string replacement){
    size_t sub_len = substr.length();
    size_t replace_len = replacement.length();
    size_t pos = 0;
    // 循环查找所有匹配的子串
    while((pos = str.find(substr, pos)) != string::npos){
        // 第二个参数传入目标子串的长度
        str.replace(pos, sub_len, replacement);
        // 下一次查找从替换完成的位置之后开始
        pos += replace_len;
    }
    return str;
}

int main(){
    cout << "Please enter a text:-" << endl;
    string str;
    string substr;
    string replacement;
    getline(cin, str);
    cout << "Please enter a word to find:-" << endl;
    getline(cin, substr);
    cout << "Please enter the replacement text:-" << endl;
    getline(cin, replacement);
    cout << "The text after process:-" << endl;
    cout << Find_Replace(str, substr, replacement);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:36:04