find() STL 算法...我做错了啥?
Posted
技术标签:
【中文标题】find() STL 算法...我做错了啥?【英文标题】:find() STL Algorithm... What am I doing wrong?find() STL 算法...我做错了什么? 【发布时间】:2012-11-10 03:16:13 【问题描述】:目前,我正在尝试了解 C++ 的基础知识,因此学习使用 find() 算法是我的目标。当我在我的代码中使用 find() 时,当我正在查找的内容超过一个单词时,我遇到了问题(例如:当我查找 FIFA 时,我得到了我正在寻找的结果。但是当我查找 Ace Combat 时,我得到一个无效的游戏输出)。如果有人能阐明我做错了什么,我将不胜感激。
//Games List
//Make a list of games I like and allow for user select one of the games
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
vector<string>::const_iterator iter;
vector<string> games;
games.push_back("FIFA");
games.push_back("Super Mario Bros.");
games.push_back("Ace Combat");
games.push_back("Sonic");
games.push_back("Madden");
cout << "These are my some of my favorite game titles.\n";
for (iter = games.begin(); iter != games.end(); ++iter)
cout << *iter << endl;
cout << "\nSelect one of these games titles.\n";
string game;
cin >> game;
iter = find(games.begin(), games.end(), game);
if (iter != games.end())
cout << game << endl;
else
cout << "\nInvalid game.\n";
return 0;
【问题讨论】:
【参考方案1】:问题是cin >> game;
语句只读取输入的一个单词。因此,当用户输入“Ace Combat”时,您的程序会读取并搜索“Ace”。要解决问题,请使用std::getline()
阅读整行而不是单个单词。例如,将cin >> game;
替换为std::getline(cin, game);
。
【讨论】:
对编程相当陌生,所以必须研究 'std::getline()'。我正在阅读的书基本上让我在这本书上失败了,但是谢谢! 在 std::getline() 回答问题的地方,我认为这不是免费的午餐。在原始代码中,多余的空格被忽略了。现在突然间他们很重要。因此,如果您在 CR 后键入“FIFA”,则不再匹配。 @user515430:cin
处于文本模式,它会在 Windows 中删除 \r
。但你说得对——例如,多余的空格不会被删除。
回顾之前的章节,我意识到作者会使用 AceCombat 之类的方法来避免此类问题。我不记得单词之间的空格警告,但也许我看过去了。非常感谢您的帮助。【参考方案2】:
问题出在 cin。
喜欢 cin >> 游戏;
如果您输入“Ace Combat”,则游戏 ==“Ace”。
它会在第一个空白处停止。
【讨论】:
以上是关于find() STL 算法...我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章