中断的循环C++

Interrupted For Loop C++

本文关键字:C++ 循环 中断      更新时间:2023-10-16

我有这个代码

#include <iostream>
#include <string> 
using namespace std;
int main() {
    string text, findstring, replacestring;
    int i = -1;
    cout << "Text eingeben: ";
    getline( cin, text ); 
    cout << "findstring: ";
    cin >> findstring; 
    cout << "replacestring: "; 
    cin >> replacestring;
    if( text.find( findstring, 0 ) == -1 ) {
        cout << "Fehler: findString ist nicht vorhanden" << endl;
        return 1;
    }
    cout << endl;
    for (i; i>text.length();++i) {
        i =    text.find( findstring, i+1 );
            cout << "String " << findstring << " gefunden an Pos: " << i << endl;
            text.replace( i, findstring.length(), replacestring );
    }
    cout << "Ergebnis: " << text << endl;
    cout << text.length();
    return 0;
}
它在另一个字符串

中搜索一个字符串并返回其位置并用另一个字符串替换它。现在我的问题是,当目标字符串多次包含在原始字符串中时,为什么这不起作用? 我尝试使用...而循环,它工作得很好。 我想知道如何使用 for 循环执行此操作。

这有点棘手。该错误是由于将itext.length()进行比较引起的。 i是一个值为-1的int,而text.length()是一个unsigned type,因此-1 is always > text.length()。这就是为什么您的for loop只运行一次(当i仍然-1时(。

这是一种可能的修复方法(在我的机器上运行良好(:

#include <iostream> 
#include <string>
using namespace std;
int main() {
    string text, findstring, replacestring;
    int i = -1;
    cout << "Text eingeben: ";
    getline(cin, text);
    cout << "findstring: ";
    cin >> findstring;
    cout << "replacestring: ";
    cin >> replacestring;
    if( text.find( findstring, 0 ) == -1 ) {
        cout << "Fehler: findString ist nicht vorhanden" << endl;
        return 1;
    }
    cout << endl;
    do {
        i = text.find(findstring, i + 1);
        if (i == -1) {
            cout << "No more result found" << endl;
            break;
        } else {
            cout << "String " << findstring << " gefunden an Pos: " << i << endl;
            text.replace(i, findstring.length(), replacestring);
        }
    } while (true);
    cout << "Ergebnis: " << text << endl;
    cout << text.length() << endl;
    return 0;
}