【问题标题】:How do I assign a string to an int variable?如何将字符串分配给 int 变量?
【发布时间】:2018-10-08 21:09:19
【问题描述】:

我正在制作一个 Card and Deck 程序,我有点困惑如何在构造函数中实现一个功能,以使 Card Rank 等于“Ace”“Jack”“King”“Queen”等,具体取决于号码。

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

【问题讨论】:

  • "Ace" 如何成为分配给 int 的数字?
  • 您不能将字符串分配给 int。
  • 是的,对不起.. 我对编码还很陌生。我只是不确定如何处理这样的问题。将“王牌”分配给排名可能不是正确的做法,这就是我问这个问题的原因。
  • 取一个字符串变量怎么样?
  • 然后你可以同时分配“4”(数字)和“ace”(字符串)

标签: c++ converter


【解决方案1】:

您可以尝试使用枚举。这不是字面上的字符串,而是一组保证不共享值的常量整数。

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;

【讨论】:

    【解决方案2】:

    您可能不想在构造函数中这样做。相反,当排名值等于特定数字时,您可以更改 ostream 的输出。例如:

    ostream & operator<<(ostream &out, const Card &rhs) {   
        if (rhs.rank == 1) {
                    out << "Ace of ";
        }
       }
    

    【讨论】:

      【解决方案3】:

      您不能将 rank 用作 i int 并将 next 用作 i 字符串类型。如果您想创建类似的东西,请尝试使用字符串类型进行排名。 呵呵

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多