有没有更好的方法来检测向量中一个项目的多次出现?
Is there a better way to detect multiple occurrences of an item in my vector?
我是STL的初学者,我用它来制作一个简单的刽子手项目。完整代码在这里:https://github.com/SamtheSaint/Hangman。
我需要检测向量中多次出现的字母,但我做不到,最终解决了它以完成程序。有没有更简单的方法可以做到这一点?
iter = find(gameWord.begin(), gameWord.end(), playGuess);
if (iter == gameWord.end()) {
guesses--;
}
while (iter != gameWord.end()) {
iter = find(gameWord.begin(), gameWord.end(), playGuess);
if (iter != gameWord.end()) {
int index = distance(gameWord.begin(), iter);
hiddenWord[index] = playGuess;
*iter = '0'; // so program can find the next one
}
}
我最终破坏了gameWord向量,所以我必须在它所在的循环开始时制作一个副本(我称之为checkWord),以便以后可以将其与hiddenWord进行比较。
你不需要std::map
.
您只需要两个std::string
(一个是猜测表达式,另一个是显示给玩家的模式),它们将保持同步。这意味着你应该把它们括在课堂上。
不要让事情变得更复杂,这是必要的。 这很简单:
class Hangman {
public:
constexpr SecretChar = '_';
Hangman(const std::string& secret)
: mSecret(secret)
{
provideMask();
}
bool guess(char ch) {
auto index = mSecret.find(ch);
if (index == std::string::npos) return false;
if (already_guessed(index)) return false;
updateMaskWith(ch);
return true;
}
std::string mask() const {
return mMask;
}
private:
void provideMask() {
mask = mSecret;
std::replace_if(mMask.begin(), mMask.end(), std::isalpha, SecretChar);
}
bool already_guessed(int index) {
return mMask[index] != SecretChar;
}
void updateMaskWith(char ch) {
auto index = mSecret.find(ch);
while (index == std::string::npos) {
mMask[index] = ch;
index = mSecret.find(ch, index + 1);
}
}
private:
std::string mSecret;
std::string mMask;
};
现在编写单独的代码,它将使用它并保持分数,你几乎完成了。
相关文章:
- 运行同一解决方案的另一个项目的项目
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 从链接列表c++中删除一个项目
- 在Qt/C++中从一个代码构建两个略有不同的项目
- 如何在 c++ 项目中包含一个包含所有头文件?
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 在矢量中使用擦除时双重释放或损坏(快速顶部).如何擦除一个矢量的几个项目知道它们的索引?
- 在macOS上使用libcurl库编译一个c++at项目
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 仅从无序集合中删除一个项目
- 如何在一个简单的C++项目中使用Poco库
- 是否可以将 EXE 文件作为 lib 文件链接到另一个项目?
- 从另一个动态链接库项目调用静态库函数
- 如何在QListWidget中显示QStringList的每个项目QLabel和另一个QString?
- 如何编译和运行一个新的 C++ Actor 框架项目?
- 欧拉项目#8:C++错误的答案(为一个小的炮制输入给出正确的答案)
- 如何使用另一个项目命名空间?
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 如何将一个 exe 项目链接到另一个 exe 项目中的类
- NetBeans - 两个项目 - 一个找不到要包含的文件 (C++)