我试图使用循环创建变量名。
具体来说,我正在使用这种结构:
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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:2)
你认为这是最好的解决方案,但我可以向你保证,事实并非如此。将逻辑与变量的名称联系起来是一个糟糕的坏主意,从逻辑和维护的立场来看。你真正想要的是一个集合,它可以将一个数据(在这种情况下,一个字符串)与另一个数据相关联。
查看类似map
的数据结构答案 2 :(得分:0)
您需要为此使用数组,它们允许单个变量包含一组项目。
然后,您只需将变量名称与索引一起使用,例如:
int xyzzy[5];
for (int i = 0; i < 5; i++)
xyzzy[i] = i * 7;
// gives 0, 7, 14, 21, 28
事实上,你的代码已经有数组,代表套装和卡面值,与你在这里所需要的不完全不同,所以我不确定为什么你没有做出逻辑 - 也可以使用它们作为卡片。但这基本上就是你做的。
答案 3 :(得分:0)
这是不可能的。编译C ++程序时,任何变量名称的概念都会完全消失。它不能在运行时生成变量名,因为它们不存在。
然而,当然有一种方法可以做到这一点。这正是数组的用途。它们为您提供了一组可以按编号索引的对象(i
,在您的情况下)。您已经有一个名为aDeck
的变量,但我认为您已经错误地定义了它。您可能想要:
card aDeck[52];
现在你将有一副52张牌。此套牌中的每张卡都有suit
和rank
个成员。您可以使用aDeck[i]
访问数组的每个成员。因此,将循环内部更改为:
aDeck[i].rank = aRank[r];
aDeck[i].suit = aSuit[s];