提问人:Mr.Moffia 提问时间:3/20/2023 更新时间:3/20/2023 访问量:77
C++,字符串似乎随机截断 [关闭]
C++, string is seemingly truncating randomly [closed]
问:
我正在尝试创建一个循环,该循环将删除字符串的多个实例,在本例中为“123”,并将它们替换为一系列字符“168”以进行课堂作业。我把那部分记下来了,但无论出于什么原因,字符串的某些部分似乎也在随机位置截断。
代码如下:
#include <iostream>
#include <string>
using namespace std;
int main() {
string secretStr;
int indx;
cin >> secretStr;
indx = 0;
// not part of the code, but I can only edit from here...
while(secretStr.find("123") != string::npos){
indx = secretStr.find("123");
secretStr.replace(indx, indx+3, "168");
indx = 0;
}
//..to here
cout << "Valid password: " << secretStr << endl;
return 0;
}
我试过弄乱 while 循环的条件,但一直无法找到正确的检查方法。完全有可能我也看错了地方。
答:
2赞
Ietu
3/20/2023
#1
因此,如果我们查看 CPP 字符串替换参数,第二个应该是要由另一个字符串对象替换的字符数。您当前拥有的是 which now 是子字符串的最后一个位置,但是您向它添加 + 3,因此它的位置 3 更高,这是在 之后,当您将其传递给 时,它可能会导致截断。您需要做的就是:len
indx+3
123
replace
将其替换为secretStr.replace(indx, 3, "168");
例如,只是为了测试,这将在您期望的行为中起作用
#include <iostream>
#include <string>
using namespace std;
int main() {
string secretStr;
int indx;
secretStr = "123pass123word123";
indx = 0;
while(secretStr.find("123") != string::npos){
indx = secretStr.find("123");
secretStr.replace(indx, 3, "168");
}
cout << "Valid password: " << secretStr << endl;
return 0;
}
如果您需要更多帮助,请告诉我。
评论
replace
indx+3
3