【发布时间】:2015-09-30 16:13:01
【问题描述】:
我正在编写一个小游戏;但是 stringname.erase() 似乎在 'for-loop' 中不起作用,我想了解原因,我还有其他选择,但我不明白以下代码中发生了什么。
我的情况的更多解释(重要!):
guess 是一个字符。 'tmgword' 和 'word' 是字符串类型,并且:tmgword = word;
我从我的代码中了解到的:
在第一次,'while'循环验证字符串'tmpgword'中是否有'guess'。 这是真的,for 循环工作正常,验证 if 条件的正确字符(猜测)被删除。
第二次:'while'循环再次验证字符串'tmpgword'中是否有'guess'。 这是真的,因此我们再次进入“for-loop”;然后进入'if'-block(找到正确的字符)但是这里erase()不起作用,我们进入了一个无限循环。
当程序使用'for-loop'找到正确的索引时,我会中断,并从头开始搜索,以防出现更多猜测。
问题是:程序再次找到 'guess' 但 erase() 不会删除它!
谁能解释一下。这是我的代码:
while (tmpgword.find(guess,0) != string::npos )
{
for (i = 0; i < word.size(); i++) // verify the input;
{
if (word[i] == guess)
{
encword[i] = word[i];//I don't think this line is important
tmpgword.erase(tmpgword.begin() + i);
break;
}
}
}
【问题讨论】:
-
删除
tmpgword中的字符后,它不再等于word。所以word中的位置与tmpgword中的位置不匹配。 -
.tmpgword.find()返回找到字符时的位置。你为什么不把它放在一个变量中并删除那个位置呢? -
我犯了一个错误 ==> 我多次更改我的代码,我找到了更好的解决方案,但我想知道为什么这段代码不能正常工作; (编码了3个多小时),我失去了注意力,我没有意识到这个错误,谢谢,我明白现在是怎么回事了。