(C++)For循环内的Replace函数超出范围错误

jvidinwx  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(169)

当我试图在for循环中替换特定i索引处的字符时,遇到了“超出范围”错误。提示要求接受仅包含数字的密码。
对于passPhrase中不是数字的每个字符,将该字符替换为“0”。
例如:如果输入为32 L04,则输出为:
调整后的密码:32004
这是我到目前为止所拥有的:

string passPhrase;
unsigned int i;

cin >> passPhrase;
for (i = 0; i < passPhrase.size(); ++i) {
    if (!isdigit(passPhrase.at(i))) {
        passPhrase.replace(passPhrase.at(i), 1, "0");
    }
}
cout << "Adjusted password: " << passPhrase << endl;

运行这段代码会输出一个超出范围的错误,我似乎无法理解为什么会这样。
但是,我发现将passPhrase.replace(passPhrase.at(i), 1, "0");行更改为
passPhrase.at(i) = '0';产生正确的输出。这对我来说是有意义的,可能是更有效的答案,但如果有人能解释为什么我的原始行产生错误,那将是非常感谢!

8dtrkrch

8dtrkrch1#

这是一个typo:

passPhrase.replace(passPhrase.at(i), 1, "0");

// ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
// This is a random nubmer between 0 and 255
// or -128 and 127 where a position between 
// 0 and passPhrase.size() - 1 is expected.

应该是

passPhrase.replace(i, 1, "0");

或者只是

passPhrase[i] = '0';

相关问题