我正在研究一个项目,需要我在C++中制作Hang子手游戏。我大部分都在工作,但在用户输入猜测后每次都会正确输出拼写错误的部分。我创建了一个类来表示一个hang子手的游戏,在这个类中是确定猜测的方法。如果在字典中随机选择的单词中的任何位置发现猜测,我将该char保存到名为currentWord的矢量中的相同位置。 currentWord在构造函数中被初始化为包含“_”,用于随机选择的单词的长度(这样它与单词的大小相同,我可以在用户键入猜测时更新它)。例如,如果单词是“semicolonialism”,并且用户的第一个猜测是'i',我想用current字符'i'替换currentWord矢量中的'_'。向量超出范围 - C++
string tempWord = word;
for (int i = 0; i < tempWord.size(); i++) {
u_long location = tempWord.find(guess);
currentWord->at(location) = tempWord[location];
tempWord[location] = '_';
}
我试图做的是将成员变量“word”存储在名为tempWord的临时变量中。然后我从0迭代到tempword的长度。我使用tempWord.find(猜测)来查找tempWord中与猜测匹配的位置,将其存储到称为位置的变量中,然后更新该位置处的currentWord矢量以等于该位置处的tempWord。由于这只会在第一次找到匹配的字符时起作用,所以我将tempWord [位置]更改为'_',这样下次通过时,位置就会有所不同。但通过这样做,我有时会遇到超出范围的错误。如果我评论出
tempWord[location] = '_';
然后我看不到这个错误,但只有第一次出现被替换。即使我得到了这个界限错误,我可以在调试器中看到每个事件在currentWord向量中被正确替换。这让我很困惑,所以任何帮助将不胜感激!由于
编辑
由于rapptz建议检查的位置等于的std :: string ::非营利组织,我终于有工作。下面是在地方,检查更新的代码段:
string tempWord = word;
for (int i = 0; i < tempWord.size(); i++) {
u_long location = tempWord.find(guess);
if (location != std::string::npos) {
currentWord->at(location) = tempWord[location];
tempWord[location] = '_';
}
}
我真的很喜欢特里斯坦的建议过了,会做,明天最有可能的。一旦我这样做,我会发布更新后的代码,以防其他人可能会觉得它有用。再次感谢!
您需要检查的位置等于'的std :: string :: npos'。 – Rapptz
感谢您的提示!那样做了。如果你真的很快就做出答案,我会接受它。再次感谢 – mike
而不是设置'tempWord [location] ='_'来让它找到下一个匹配,你应该使用一个std :: string :: find()'重载, ,并传递前一场比赛的位置。这样,你只需避免写'tempWord'(这样你就可以避免复制),但它会加快你的搜索速度。 –