在文本流中将所有出现的一个字符串替换为另一个字符串

时间:2017-07-25 10:12:42

标签: c++ string replace

正如标题所说,如何用另一个字符串替换字符串?例如:用户将输入三个输入。第一个输入是程序将替换的字符串;第二个是替换input1的字符串;第三个是要打印出来的字符串。所以如果:

输入1 =花生

输入2 =椰子

输入3 =替换花生替换

输出:替换椰子替换

我已经开始了,但我的程序只能替换长度相同的单词。我试着搜索我的问题,但是我不理解给定的解决方案,因为我只是C / C ++的新手。

char replacing[100];
char replacement[100];
char original[1000];
int count;

cin >> replacing;
cin >> replacement;

while(! cin.eof())
{
    cin >> original;

    char * pch;


    pch = strstr (original, replacing);

    count = strlen(replacement);
    strncpy (pch, replacement, count);


    cout << original << endl;

}

2 个答案:

答案 0 :(得分:1)

怎么样:

  • 您首先找到(如果有)该字符串的出现
  • 使用replace将事件替换为第二个字符串

这是应该有用的东西:

    bool replaceFirst(string& input, const std::string& toBeReplaced, const std::string& replacement) {
    size_t start_pos = input.find(toBeReplaced);
    if(start_pos == std::string::npos)
        return false; //substring not found! 

    input.replace(start_pos, toBeReplaced.length(), replacement); //found. now i can replace!
    return true;
}

由于您使用的是char数组而不是string,因此必须确保替换不会导致您超出范围(字符串会自动调整大小)。

答案 1 :(得分:0)

关键问题是strncpy不会分配(或释放)任何内存。这意味着如果replacementreplacing短,replacing的一部分将不会被覆盖。同样,如果replacement更长,则会覆盖超出replacing的结尾。

正如已经说过的,如果Qt是你的一杯茶,你最好使用std::string(或其他一些C ++字符串类,如Qt的QString。)

另外一件小事,一般来说对于溪流最好不要只检查eof,而是写一些类似

的内容
while (cin >> original) {

如果流处于任何失败状态,这将终止,而不只是eof