3

現時点では、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;
}
4

2 に答える 2

6

問題は、cin >> game;ステートメントが入力の 1 語しか読み取らないことです。したがって、ユーザーが「Ace Combat」と入力すると、プログラムは「Ace」を読み取って検索します。この問題を解決するには、 を使用std::getline()して、1 つの単語ではなく行全体を読み取ります。たとえば、 に置き換えcin >> game;ますstd::getline(cin, game);

于 2012-11-10T03:20:18.707 に答える
2

問題はcinにあります。

cin >> ゲームのように。

「Ace Combat」と入力すると、game == 「Ace」。

最初の空白で停止します。

于 2012-11-10T03:46:17.880 に答える