#include <stdio.h>
#include <string.h>
typedef enum
{
TYPE_ONE = 0, //个子
TYPE_PAIR, //对子
TYPE_STAIGHT, //顺子
TYPE_THREE, //三个
TYPE_BOMB, //炸弹
TYPE_JOKER_BOMB //王炸
}ENUM_CARD_TYPE;
typedef struct
{
ENUM_CARD_TYPE type;
int value;
}playing_card;
/* 获取牌的类型 */
ENUM_CARD_TYPE get_type(int size, int len)
{
ENUM_CARD_TYPE type;
switch (size)
{
case 1:
type = TYPE_ONE;
break;
case 2:
if(len == size) // 10 也为个子
{
type = TYPE_ONE;
}
else
{
type = TYPE_PAIR;
}
break;
case 3:
type = TYPE_THREE;
break;
case 4:
if(len == 5)
{
type = TYPE_PAIR; //10 10 一对10
}
else
{
type = TYPE_BOMB;
}
break;
case 5:
if(len == size)
{
type = TYPE_ONE;
}
else
{
type = TYPE_STAIGHT;
}
break;
default:
if(len == 11 && size == 8) // 四个10 为炸弹
{
type = TYPE_BOMB;
}
else if(len == 10 && size == 6) // 10 - A 为顺子
{
type = TYPE_STAIGHT;
}
else
{
type = TYPE_JOKER_BOMB;
}
break;
}
return type;
}
/* 获取牌的大小 3-JOKER 对应 3-17 大小值 */
int get_value(char* str)
{
int result = 0;
int c = str[0];
int len = strlen(str);
if(c >= '3' && c <= '9')
{
result = c - '0';
}
else if(str[0] == '1' && str[1] == '0') //10
{
result = 10;
}
else if(len == 5 && str[0] == 'j' && str[1] == 'o' && str[2] == 'k') //joker
{
result = 16;
}
else if(len == 5 && str[0] == 'J' && str[1] == 'O' && str[2] == 'K') //JOKER
{
result = 17;
}
else
{
switch (c)
{
case 'J':
result = 11;
break;
case 'Q':
result = 12;
break;
case 'K':
result = 13;
break;
case 'A':
result = 14;
break;
case '2':
result = 15;
break;
default:
result = 0;
break;
}
}
return result;
}
int get_card_value(playing_card *card, char* str)
{
int size = 0;
int len = strlen(str);
for(int i = 0; i < len; i++)
{
if(str[i] != ' ')
{
size++;
}
}
card->type = get_type(size, len);
card->value = get_value(str);
return 0;
}
int main()
{
char card_input[100] = {0};
playing_card cards[2];
memset(cards, 0, sizeof(playing_card) * 2);
if(gets(card_input) == NULL)
{
return -1;
}
// printf("%s", card);
char *split1 = strtok(card_input, "-");
char *split2 = NULL;
get_card_value(&cards[0], split1);
if((split2 = strtok(NULL, "-")) != NULL)
{
get_card_value(&cards[1], split2);
}
// for(int i = 0; i < 2; i++)
// {
// printf("card[%d] type = %d, value = %d \n", i, cards[i].type, cards[i].value);
// }
if(cards[0].type >= 4) //第一手牌为炸弹
{
if(cards[0].type > cards[1].type) //第一手牌为王炸
{
printf("%s", split1);
}
else if(cards[0].type == cards[1].type) //类型相同比较大小
{
if(cards[0].value > cards[1].value)
{
printf("%s", split1);
}
else
{
printf("%s", split2);
}
}
else if(cards[1].type >= 4 && cards[1].type > cards[0].type) //第二手为炸弹
{
printf("%s", split2);
}
else //不同类型,且不为炸弹,无法比较
{
printf("ERROR");
}
}
else if(cards[0].type < 4) //第一手不为炸弹
{
if(cards[0].type == cards[1].type) //相同类型比较
{
if(cards[0].value > cards[1].value)
{
printf("%s", split1);
}
else
{
printf("%s", split2);
}
}
else if(cards[1].type >= 4) //第二手为炸弹,一定大于第一手
{
printf("%s", split2);
}
else
{
printf("ERROR");
}
}
return 0;
}