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

您需要为此使用数组,它们允许单个变量包含一组项目。

然后,您只需将变量名称与索引一起使用,例如:

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 回答
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 回答