

以下のように出力したいのですが、うまくいきません。  
宜しくお願い致します。

Example Output 1:

二つの種類の数字を1から10までで選択してください  
入力）1 2  
二つのフレーズが一致しません  
最初のフレーズは "小島よしお"

Example Output 2:  
二つの種類の数字を1から10選択してください  
入力）4 9  
あなたはペアを見つけました！  
二つのフレーズは "田中夫妻"

//ここからコード

[code]

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        vector<string> phrases;
        phrases.push_back("足利義視");
        phrases.push_back("小島よしお");
        phrases.push_back("犬神家");
        phrases.push_back("田中夫妻");
        phrases.push_back("農村");
    
        vector<string*> randomPhrases;
        randomPhrases.push_back(&phrases.at(1));
        randomPhrases.push_back(&phrases.at(4));
        randomPhrases.push_back(&phrases.at(0));
        randomPhrases.push_back(&phrases.at(3));
        randomPhrases.push_back(&phrases.at(4));
        randomPhrases.push_back(&phrases.at(2));
        randomPhrases.push_back(&phrases.at(1));
        randomPhrases.push_back(&phrases.at(2));
        randomPhrases.push_back(&phrases.at(3));
        randomPhrases.push_back(&phrases.at(0));
    
    
        // Ask user to select two phrases
        cout <<"二つの種類の数字を1から10までで選択してください"<< endl;
        int x;
        int y;
        cin >> x;
        cin >> y;
    
    
        // Determine if the two selected phrases match (i.e. have the same memory address)
    
    
        if(&phrases.at(x) == &phrases.at(y))
    
        {
            cout <<"あなたはペアを見つけました！" << endl;
            cout << "二つのフレーズは" <<&phrases.at(x) << endl;
        }
        else
        {
            cout <<"二つのフレーズが一致しません" << endl;
            cout << "最初のフレーズは" <<&phrases.at(x) << endl;
    
    
        }
    
    
    
    
    
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2016-11-18T12:27:32.103
30512
2016-11-18T14:38:12.427
2016-11-18T12:51:16.090
5044
19321
question
c++
Vector、ポインタの使い方について


気づいた点が四つあります。

  1. `string` を使うときは `#include <string>` が必要
  2. ユーザーの入力は1から10だが、`vector` のインデックスは0から始まるので、変換が必要
  3. 問題が入っているのは `phrases` ではなく `randomePhrases`
  4. ポインタの中身を参照するには、`&` ではなく `*` を使用

元のコードをなるべく変えないように変更すると

[code]

    #include <iostream>
    #include <vector>
    #include <string>    // 1. includeが必要
    using namespace std;
    
    int main()
    {
        vector<string> phrases;
        phrases.push_back("足利義視");
        phrases.push_back("小島よしお");
        phrases.push_back("犬神家");
        phrases.push_back("田中夫妻");
        phrases.push_back("農村");
    
        vector<string*> randomPhrases;
        randomPhrases.push_back(&phrases.at(1));
        randomPhrases.push_back(&phrases.at(4));
        randomPhrases.push_back(&phrases.at(0));
        randomPhrases.push_back(&phrases.at(3));
        randomPhrases.push_back(&phrases.at(4));
        randomPhrases.push_back(&phrases.at(2));
        randomPhrases.push_back(&phrases.at(1));
        randomPhrases.push_back(&phrases.at(2));
        randomPhrases.push_back(&phrases.at(3));
        randomPhrases.push_back(&phrases.at(0));
    
    
        // Ask user to select two phrases
        cout <<"二つの種類の数字を1から10までで選択してください"<< endl;
        int x;
        int y;
        cin >> x;
        cin >> y;
        --x; --y;    // 2. インデックス変換
    
    
        // Determine if the two selected phrases match (i.e. have the same memory address)
    
    
        if(*randomPhrases.at(x) == *randomPhrases.at(y))    // 3. と 4.
    
        {
            cout <<"あなたはペアを見つけました！" << endl;
            cout << "二つのフレーズは" <<*randomPhrases.at(x) << endl;    // 3. と 4.
        }
        else
        {
            cout <<"二つのフレーズが一致しません" << endl;
            cout << "最初のフレーズは" <<*randomPhrases.at(x) << endl;    // 3. と 4.
    
    
        }
    
    
    
    
    
        return 0;
    }
    
[/code]

とりあえずは、これで動きます。


CC BY-SA 3.0
2016-11-18T14:38:12.427
30515
2016-11-18T14:38:12.427
3605
30512
answer