我有一个我需要排序的数组。它是使用C ++使用其他2个数组制作的。
string deck[4][13];
string type[4] = {"Hearts","Diamonds","Spades","Clubs"};
string cards[13] = {"Ace","King","Queen","Jack","10","9","8","7","6","5","4","3","2"};
for (int i = 0; i<4; i++)
{
for (int j=0; j<13 ; j++)
{
deck[i][j]=type[i]+"-"+cards[j];
cout << deck[i][j] << " ";
}
cout << endl;
}
我正在洗牌,然后再试一次。 我理解将套牌的索引与索引进行比较,其他阵列是最简单的方法,但我不明白如何做到这一点。 提前感谢您的帮助。
答案 0 :(得分:2)
建议:创建卡片类并使用std::vector
这将减少程序的复杂性(和缺陷)。
阵列很难使用,因此请使用std::vector
。
由于卡包含套装和号码,我们就这样继续:
class Card
{
std::string suit_text;
std::string card_value;
};
鉴于上述定义,可以将牌组和牌手作为Card
的容器:
std::vector<Card> deck(52); // Allocate space for 52 cards in the deck.
std::vector<Card> poker(5); // A poker hand consists of 5 cards.
关于如何使用该卡的剩余代码留给OP。
编辑1:基础52数学
为卡分配随机套装和值可以被认为是选择0到51(或1和52)之间的随机数。诀窍是将数字转换为套装数量和数值。
一套西装中有13张牌,所以卡号 / 13会产生西装号码:
suit_id = random_number / 13;
card_value = random_number % 13;
此外,使用std::bitset
可能有助于确定已生成哪些随机数。
答案 1 :(得分:1)
您的情况需要采用与使用字符串捕获套装和卡片不同的方法。
您对西装的排序顺序,“红心”&gt; “钻石”&gt; “黑桃”&gt; “俱乐部”使用数字很容易实现,但需要不必要的复杂功能 使用字符串时。
同样适用于卡片。
我的建议是创建代表套装和卡片的枚举。存储这些枚举 对于所有计算。当打印消息时,有一个函数返回给定卡片的字符串。
enum Suit { HEARTS, DIAMONDS, SPADES, CLUBS};
enum Card { ACE, KING, QUEEN, JACK, TEN, NINE, EIGHT, SEVEN, SIX, FIVE, FOUR, THREE, TWO};
struct DeckCard
{
Suit suit;
Card card;
// Implement the < operator to make it easy to sort a deck of cards.
bool operator<(DeckCard const& rhs) const
{
if ( this->suit != rhs.suit )
{
return (this->suit < rhs.suit);
}
return (this->card < rhs.card);
}
std::string toString()
{
return suiteToString() + "-" + cardToString();
}
std::string suiteToString()
{
switch ( suit )
{
case HEARTS:
return "Hearts";
case DIAMONDS:
return "Diamonds";
case SPADES:
return "Spades";
case CLUBS:
return "Clubs";
default:
}
return "Unknown Suit";
}
std::string cardToString()
{
switch ( card )
{
case ACE:
return "Ace";
case KING:
return "King";
case QUEEN:
return "Queen";
case JACK:
return "Jack";
case TEN:
return "10";
case NINE:
return "9";
case EIGHT:
return "8";
case SEVEN:
return "7";
case SIX:
return "6";
case FIVE:
return "5";
case FOUR:
return "4";
case THREE:
return "3";
case TWO:
return "2";
}
return "Unknwon Card";
}
};
DeckCard deck[4*13];
for (int i = 0; i<4; i++)
{
for (int j=0; j<13 ; j++)
{
deck[i*13+j].suit = type[i];
deck[i*13+j].card = cards[j];
cout << deck[i*13+j].toString() << " ";
}
cout << endl;
}
// Sort the cards.
std::sort(deck[0], deck[51]);
您也可以使用std::shuffle
来洗牌