Как назначить строку для переменной int? - PullRequest
0 голосов
/ 28 апреля 2018

Я делаю программу для карт и колод, и меня немного смущает вопрос о том, как реализовать функцию в конструкторе, чтобы сделать Ранг карты равным «Туз», «Джек», «Король», «Королева» и т. Д. В зависимости от номер.

Card::Card(char suiter, int ranker) {
    suit = suiter;
    rank = ranker;
    if (rank == 1) {
        rank = "Ace";   //Assign rank to "Ace" if the number equals 1
    }
}

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Вы, вероятно, не хотите делать это в конструкторе. Вместо этого вы можете изменить вывод ostream, когда значения ранга равны конкретным числам. Например:

ostream & operator<<(ostream &out, const Card &rhs) {   
    if (rhs.rank == 1) {
                out << "Ace of ";
    }
   }
0 голосов
/ 28 апреля 2018

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

enum CardRank
{
  Ace,
  Two,
... ... ...
  Jack,
  Queen,
  King
};

Это создает новый тип CardRank, который вы можете использовать только для рангов карт в вашем коде. Вы просто делаете свой член rank типа CardRank и можете ссылаться на его значение по имени.

Под капотом для большинства намерений и целей подразумевается целое число без знака, которое может принимать только значения в диапазоне от Ace (0) до King (12)

Учитывая, что я не вижу, что вы пытаетесь записать эту строку на экран, это может быть путь. И даже если вы планируете выписать эту строку, вы все равно можете использовать это перечисление и извлекать значение строки только тогда, когда вам нужно написать его с помощью следующего вида:

std::string RankNames[] =
{
  "Ace",
  "2",
... ... ... ...
  "Jack",
  "Queen",
  "King"
};

CardRank rank = Ace;

std::cout << RankNames[rank] << std::endl;
0 голосов
/ 28 апреля 2018

Вы не можете использовать rank как i int и далее как i строковый тип. Если вы хотите создать что-то подобное, попробуйте использовать строковый тип для ранга. хо

...