使用C ++中的循环创建顺序变量名

时间:2012-11-22 21:43:18

标签: c++ variables loops structure

我试图使用循环创建变量名。

具体来说,我正在使用这种结构:

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 个答案:

答案 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张牌。此套牌中的每张卡都有suitrank个成员。您可以使用aDeck[i]访问数组的每个成员。因此,将循环内部更改为:

aDeck[i].rank = aRank[r];
aDeck[i].suit = aSuit[s];