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