【问题标题】:Interrupted For Loop C++中断循环 C++
【发布时间】:2018-03-22 18:27:29
【问题描述】:

我有这个代码

#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;
}

它在另一个字符串中搜索一个字符串并返回它的位置并用另一个替换它。现在我的问题是,当目标字符串多次包含在原始字符串中时,为什么这不起作用?我尝试使用 do...while 循环,它运行良好。我想知道如何使用 for 循环来做到这一点。

【问题讨论】:

  • i &gt; text.length() 永远不会为真,因为您将 i 初始化为 -1
  • i = text.find之前是否缺少if
  • 为什么当“搜索”字符串多次包含在原始字符串中时这不起作用 -- 现在是熟悉使用调试器的好时机随您的编译器工具集一起提供。使用调试器可以发现所有提供给您的 cmets。
  • @SalemSfaxi - I downvoted because。您可以通过输出变量、循环索引等的值来完成最简单的事情,看看哪里出了问题。由于缺乏调试工作,您很有可能被否决。
  • 计数时,for 循环几乎总是使用&lt; 而不是&gt;。请记住,条件是何时继续重复,而不是何时停止。

标签: c++ loops for-loop break


【解决方案1】:

这有点棘手。该错误是由比较itext.length() 引起的。 i 是一个值为 -1 的 int,而 text.length() 是一个 unsigned type,因此是 -1 is always &gt; 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;
}

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2010-09-05
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多