Need help with Containers

I need help on creating a container in an already working program. What I already have is a poker hand stating that I have three numbers that the user inputs that says you have three (number or face card), you have a pair, you have a high-straight, or you have high card. Now my professor is asking us to do add another hand that states three cards and having the first hand beat, lose, or tie the second hand. He wants us to seperate the functions in a header file and the rest to do like normal. But i'm confuse on where to start on the existing program.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
  #include<iostream>
#include<string>
using namespace std;

// input range
const int MIN_CARD_NORMAL_VALUE		= 1;
const int MAX_CARD_NORMAL_VALUE		= 13;

// numberic values of cards
const int ACE_LOW_VALUE				= 1;
const int MIN_NON_FACE_CARD_VALUE	= 2;
const int MAX_NON_FACE_CARD_VALUE	= 10;
const int JACK_VALUE				= 11;
const int QUEEN_VALUE				= 12;
const int KING_VALUE				= 13;
const int ACE_HIGH_VALUE			= 14;

// face card names
const string JACK_NAME		= "jack";
const string QUEEN_NAME		= "queen";
const string KING_NAME		= "king";
const string ACE_NAME		= "ace";

// non-face card (number) names
const string NUMBER_2_NAME	= "two";
const string NUMBER_3_NAME	= "three";
const string NUMBER_4_NAME	= "four";
const string NUMBER_5_NAME	= "five";
const string NUMBER_6_NAME	= "six";
const string NUMBER_7_NAME	= "seven";
const string NUMBER_8_NAME	= "eight";
const string NUMBER_9_NAME	= "nine";
const string NUMBER_10_NAME	= "ten";

int main(void)
{
	// 1 Input hand

	// 1.1 basic input
	int card1, card2, card3;
	cout << "Enter three cards in the range "
			<< MIN_CARD_NORMAL_VALUE
			<< " to "
			<< MAX_CARD_NORMAL_VALUE
			<< ", separated by spaces: ";
	cin >> card1 >> card2 >> card3;
	cin.ignore(999,'\n');

	// 1.2 format check
	if ( cin.fail() )
	{
		cin.clear();
		cin.ignore(999,'\n');
		cout << "Input format error. Press ENTER to terminate: ";
		cin.ignore(999,'\n');
		return 1;
	}

	// 1.3 range check
	if ( card1 < MIN_CARD_NORMAL_VALUE || card1 > MAX_CARD_NORMAL_VALUE
			|| card2 < MIN_CARD_NORMAL_VALUE || card2 > MAX_CARD_NORMAL_VALUE
			|| card3 < MIN_CARD_NORMAL_VALUE || card3 > MAX_CARD_NORMAL_VALUE )
	{
		cout << "Input range error. Press ENTER to terminate: ";
		cin.ignore(999,'\n');
		return 1;
	}

	// 2 process

	// 2.1 Adjust aces from low to high cards
	// (makes things much easier later)
	if ( card1 == ACE_LOW_VALUE ) card1 = ACE_HIGH_VALUE;
	if ( card2 == ACE_LOW_VALUE ) card2 = ACE_HIGH_VALUE;
	if ( card3 == ACE_LOW_VALUE ) card3 = ACE_HIGH_VALUE;

	// 2.2 sort cards
	if ( card1 > card2 )
	{
		int temp = card1;
		card1 = card2;
		card2 = temp;
	}
	if ( card2 > card3 )
	{
		int temp = card2;
		card2 = card3;
		card3 = temp;
	}
	if ( card1 > card2 )
	{
		int temp = card1;
		card1 = card2;
		card2 = temp;
	}

	// 2.3 determine which hand type(s) apply
	// (these look for a given hand criteria only - higher hands may exist)
	bool is3OfAKind = card1 == card3;
	bool isSimpleStraight = card2 == card1+1 && card3 == card2+1;
	bool isStraightWithAceLow = card3 == ACE_HIGH_VALUE
									&& card1 == ACE_LOW_VALUE+1
									&& card2 == card1+1;
	bool isStraight = isSimpleStraight || isStraightWithAceLow;
	bool isPair = card1 == card2 || card2 == card3;

	// 2.4 Key Card
	// Most significant card of hand.

	// 2.4.1 choose
	int keyCard;
	if ( is3OfAKind )					keyCard = card3; // high card
	else if ( isStraightWithAceLow )	keyCard = card2; // end of straight
	else if ( isStraight )				keyCard = card3; // end of straight
	else if ( isPair )					keyCard = card2; // value of pair cards
	else								keyCard = card3; // high card

	// 2.4.2 name
	string keyCardName;
	if		( keyCard == 2 )				keyCardName = NUMBER_2_NAME;
	else if ( keyCard == 3 )				keyCardName = NUMBER_3_NAME;
	else if ( keyCard == 4 )				keyCardName = NUMBER_4_NAME;
	else if ( keyCard == 5 )				keyCardName = NUMBER_5_NAME;
	else if ( keyCard == 6 )				keyCardName = NUMBER_6_NAME;
	else if ( keyCard == 7 )				keyCardName = NUMBER_7_NAME;
	else if ( keyCard == 8 )				keyCardName = NUMBER_8_NAME;
	else if ( keyCard == 9 )				keyCardName = NUMBER_9_NAME;
	else if ( keyCard == 10 )				keyCardName = NUMBER_10_NAME;
	else if ( keyCard == JACK_VALUE )		keyCardName = JACK_NAME;
	else if ( keyCard == QUEEN_VALUE )		keyCardName = QUEEN_NAME;
	else if ( keyCard == KING_VALUE )		keyCardName = KING_NAME;
	else if ( keyCard == ACE_HIGH_VALUE )	keyCardName = ACE_NAME;
	else									keyCardName = "error";

	// 2.4.3 english support

	// 2.4.3.1 article
	string keyCardNameArticle;
	if ( keyCardName == ACE_NAME || keyCardName == NUMBER_8_NAME )
		keyCardNameArticle = "an";
	else
		keyCardNameArticle = "a";

	// 2.4.3.2 pluralization
	string keyCardNamePlural;
	if ( keyCardName == NUMBER_6_NAME )
		keyCardNamePlural = "es";
	else
		keyCardNamePlural = "s";

	// 3 output hand evaluation
	cout << endl;
	cout << "You have ";
	if		( is3OfAKind )	cout << "three " << keyCardName << keyCardNamePlural << '.';
	else if	( isStraight)	cout << keyCardNameArticle << ' ' << keyCardName << "-high straight.";
	else if ( isPair )		cout << "a pair of " << keyCardName << keyCardNamePlural << ".";
	else					cout << keyCardNameArticle << ' ' << keyCardName << '.';
	cout << endl;
	
	// 4 finish up
	cout << endl;
	cout << "Press ENTER to finish...";
	cin.ignore(999,'\n');
	return 0;
}
Last edited on
What I really have so far
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "Tools.h"

#include<iostream>
#include<string>
using namespace std;

#ifndef CARD_HAND_LOCK
#define CARD_HAND_h

enum CardRank {CR_ACE_CARD = 1, CR_TWO_CARD = 2, CR_THREE_CARD = 3, CR_FOUR_CARD = 4, CR_FIVE_CARD = 5,
				CR_SIX_CARD =6, CR_SEVEN_CARD = 7, CR_EIGHT_CARD = 8, CR_NINE_CARD = 9, CR_TEN_CARD = 10,
				CR_JACK_CARD = 11, CR_QUEEN_CARD = 12, CR_KING_CARD = 13};
struct Card
{
	int face1;
	int face2;
};

class Hand
{
	Card cards[3];
public:
	Hand(string input);
};

Hand getCardHand(string prompt);
void outputCardHand(Hand cardHand);

#endif 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "CardHand.h"

#include<iostream>
#include<string>
using namespace std;

Hand getCardHand(string prompt)
{
	Card userInput;
	userInput.face1 = getInt(prompt + " Enter three space-separated cards in the range 1..13:");
	userInput.face2 = getInt(prompt + " Enter three space-separated cards in the range 1..13:");
	return userInput;
}

void outputCardHand(Hand cardHand)
{
	cout << Card.face1 << "beats a " << Card.face2 << "." << endl;
}
Topic archived. No new replies allowed.