c语言比较扑克牌大小

1.题目描述

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;

(4)输入的两手牌不会出现相等的情况。

2.输入输出

输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如 4 4 4 4-joker JOKER。
输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

3.源码实现

#include 
#include 
#include 

enum atype {
    P3 = 3,
    P4,
    P5,
    P6,
    P7,
    P8,
    P9,
    P10,
    PJ,
    PQ,
    PK,
    PA,
    P2,
    PEMP,
    PSJOKER,
    PBJOKER,
    ERROR
};

enum btype {
    once,
    twice,
    order,
    third,
    forth,
    kings,
    other
};

enum atype getonetype(char *a)
{
    if(!strcmp(a, "3"))
    {
        return P3;
    }
    else if(!strcmp(a, "4"))
    {
        return P4;
    }
    else if(!strcmp(a, "5"))
    {
        return P5;
    }
    else if(!strcmp(a, "6"))
    {
        return P6;
    }
    else if(!strcmp(a, "7"))
    {
        return P7;
    }
    else if(!strcmp(a, "8"))
    {
        return P8;
    }
    else if(!strcmp(a, "9"))
    {
        return P9;
    }
    else if(!strcmp(a, "10"))
    {
        return P10;
    }
    else if(!strcmp(a, "J"))
    {
        return PJ;
    }
    else if(!strcmp(a, "Q"))
    {
        return PQ;
    }
    else if(!strcmp(a, "K"))
    {
        return PK;
    }
    else if(!strcmp(a, "A"))
    {
        return PA;
    }
    else if(!strcmp(a, "2"))
    {
        return P2;
    }
    else if(!strcmp(a, "joker"))
    {
        return PSJOKER;
    }
    else if(!strcmp(a, "JOKER"))
    {
        return PBJOKER;
    }

    return ERROR;
}

void getsometype(char **a, enum atype *b, int n)
{
    int i;

    for(i=0; i a[j])
            {
                c = a[i];
                a[i] = a[j];
                a[j] = c;
            }
        }
    }

    /*for(i=0; i b[0])
                {
                    return 0;
                }
                else if(a[0] < b[0])
                {
                    return 1;
                }
                else
                {
                    return 2;
                }
            }
            else
            {
                return 0;
            }
        }
    }
    else if(c[1] == forth || c[1] == kings)
    {
        if(c[0] != other)
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
    else if(c[0] == once && c[1] == once)
    {
        if(a[0] > b[0])
        {
            return 0;
        }
        else if(a[0] < b[0])
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
    else if(c[0] == twice && c[1] == twice)
    {
        if(a[0] > b[0])
        {
            return 0;
        }
        else if(a[0] < b[0])
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
    else if(c[0] == third && c[1] == third)
    {
        if(a[0] > b[0])
        {
            return 0;
        }
        else if(a[0] < b[0])
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
    else if(c[0] == order && c[1] == order)
    {
        if(a[0] > b[0])
        {
            return 0;
        }
        else if(a[0] < b[0])
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
    else
    {
        return -1;
    }

    return -1;
}

int main()
{
    enum atype p[100];
    enum btype q[2];
    char buf[1024];
    char a[100][20];
    char *h[100];
    char *b;
    char *c;
    char *s;
    short r;
    int u;
    int d;
    int e;
    int i;

    while(fgets(buf, 1023, stdin) != NULL)
    {
        b = buf;
        d = 0;
        u = -1;

        while((c=strchr(b, ' ')) != NULL)
        {
            e = c - b;
            memcpy(a[d], b, e);
            a[d][e] = 0x00;

            s = strchr(a[d], '-');
            if(s == NULL)
            {
                /*printf("a[%d]=%s\n", d, a[d]);*/

                d++;
            }
            else
            {
                e = s - a[d];
                a[d][e] = 0x00;
                u = d + 1;

                /*printf("a[%d]=%s\n", d, a[d]);*/

                d++;

                e = strlen(s+1);
                memcpy(a[d], s+1, e);
                a[d][e] = 0x00;

                /*printf("a[%d]=%s\n", d, a[d]);*/

                d++;
            }

            b = c + 1;
        }

        if(b[0] != 0x00)
        {
            e = strlen(b);

            if(b[e-1] == '\n')
            {
                b[e-1] = 0x00;
                e--;
            }

            e = e > 19 ? 19 : e;

            strncpy(a[d], b, e);
            a[d][e] = 0x00;

            s = strchr(a[d], '-');
            if(s == NULL)
            {
                /*printf("a[%d]=%s\n", d, a[d]);*/

                d++;
            }
            else
            {
                e = s - a[d];
                a[d][e] = 0x00;
                u = d + 1;

                /*printf("a[%d]=%s\n", d, a[d]);*/

                d++;

                e = strlen(s+1);
                memcpy(a[d], s+1, e);
                a[d][e] = 0x00;

                /*printf("a[%d]=%s\n", d, a[d]);*/

                d++;
            }
        }

        s = strchr(buf, '-');
        s[0] = 0x00;

        for(i=0; i

4.编译源码

$ gcc -o example examle.c -std=c89

5.运行及其结果

$ ./example
4 4 4 4-joker JOKER
joker JOKER

你可能感兴趣的:(c语言比较扑克牌大小)