2

ループを使用して変数名を作成しようとしています。

具体的には、次の構造を使用しています。

struct card{
    string rank;
    string suit;
};

これは、現状の私のコードの残りの部分であり、「card + i」と表示されている場所は、「card1」や「card2」などと表示する必要がある場所です。

string aSuit[4] = {" Hearts"," Clubs"," Diamonds"," Spades"};
string aRank[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
string aDeck[52];

int main(int argc, char *argv[])
{
    int i = 0;
    for (int s=0; s<4; s++) {
        for (int r=0; r<13; r++) {
            card card+i;
            card+i.rank = aRank[r];
            card+i.suit = aSuit[s];
            cout << card + i.rank << card + i.suit << endl;
            i++;
        }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
4

4 に答える 4

3

代わりに配列を使用します。

card cards[52];

int main(int argc, char *argv[])
{
    int i = 0;
    for (int s = 0; s<4; s++) {
        for (int r = 0; r<13; r++) {
            cards[i].rank = aRank[r];
            cards[i].suit = aSuit[s];
            cout << cards[i].rank << cards[i].suit << endl;
            i++;
        }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
于 2012-11-22T21:47:58.290 に答える
2

あなたはこれが最善の解決策だと思っていますが、そうではないことは保証できます。ロジックを変数の名前に結び付けることは、論理的およびメンテナンスの観点から、悪い、悪い考えです。本当に必要なのは、あるデータ (この場合は文字列) を別のデータに関連付けることができるコレクションです。

地図のようにデータ構造を調べる

于 2012-11-22T21:48:14.123 に答える
0

これは不可能です。C++ プログラムをコンパイルすると、変数名の概念は完全になくなります。変数名が存在しないため、実行時に変数名を生成できません。

ただし、もちろん、これを行う方法はあります。これはまさに配列の目的です。それらは、番号でインデックス付けできるオブジェクトのセット全体を提供iします(あなたの場合は )。という名前の変数が既にありますが、aDeck間違って定義したと思います。あなたはおそらく欲しかったですか:

card aDeck[52];

これで、52 枚のカードのデッキができました。このデッキの各カードにはsuitrankメンバーがいます。で配列の各メンバーにアクセスできますaDeck[i]。したがって、ループの内部を次のように変更します。

aDeck[i].rank = aRank[r];
aDeck[i].suit = aSuit[s];
于 2012-11-22T21:50:31.637 に答える
0

これには配列を使用する必要があります。配列を使用すると、単一の変数にアイテムのグループを含めることができます。

次に、変数名とインデックスを次のように使用します。

int xyzzy[5];
for (int i = 0; i < 5; i++)
    xyzzy[i] = i * 7;
// gives 0, 7, 14, 21, 28

実際、あなたのコードには、スーツとカードの額面の値を表す配列が既に含まれいますが、ここで必要なものと実際にはそれほど違いはありません。そのため、それらをカードにも使用するためにロジックを飛躍させなかった理由はわかりません. しかし、それは基本的にあなたがそれを行う方法です。

于 2012-11-22T21:47:45.683 に答える