Создайте последовательные имена переменных, используя цикл в переполнении стека

Я пытаюсь создать имена переменных с помощью цикла.

В частности, я использую эту структуру:

struct card{
string rank;
string suit;
};

Это остальная часть моего кода в том виде, в каком он есть, и там, где написано «карточка + я», нужно, чтобы он сказал «карточка1» или «карточка2» и т. Д.

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;
}

2

Решение

Вместо этого используйте массивы:

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;
}
3

Другие решения

Вы считать это лучшее решение, но могу вас заверить, это не так. Связывать вашу логику с именами переменных — это плохая, плохая идея с логической точки зрения, а также с точки зрения обслуживания. То, что вам действительно нужно, — это коллекция, которая может связывать один фрагмент данных (в данном случае строку) с другим.

Посмотрите на структуру данных, как карта

2

Это невозможно Когда вы компилируете программу на C ++, любая концепция имен переменных полностью исчезает. Он не может генерировать имена переменных во время выполнения, потому что они просто не существуют.

Тем не менее, есть способ сделать это, конечно. Это именно то, для чего предназначены массивы. Они дают вам целый набор объектов, которые вы можете индексировать по номеру (i, в твоем случае). У вас уже есть переменная с именем aDeck но я думаю, что вы определили это неправильно. Возможно, вы хотели:

card aDeck[52];

Теперь у вас будет колода из 52 карт. Каждая карта в этой колоде имеет suit а также rank члены. Вы можете получить доступ к каждому члену массива с aDeck[i], Так что измените внутреннюю часть вашего цикла на:

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

Для этого вам нужно использовать массивы, они позволяют одной переменной содержать группу элементов.

Затем вы просто используете имя переменной с индексом, например:

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

На самом деле ваш код уже имеет Массивы, представляющие масти и номиналы карт, не очень отличаются от того, что вам нужно здесь, поэтому я не уверен, почему вы не сделали логический скачок, чтобы использовать их и для карт. Но это в основном то, как вы это сделаете.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector