字符串经典题之扑克牌的大小
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串经典题之扑克牌的大小相关的知识,希望对你有一定的参考价值。
题目
这种类型的题目不涉及算法,和我们日常的业务逻辑十分相似。最关键的一点就是思维清晰,逐步细化。
比较的时候首先比较类型,如果两副牌的数目相同,那么肯定是相同类型的,在这种情况下再去比较点数,而比较点数的时候大小完全是依靠第一张牌的点数大小决定的;一旦两幅排数目不相同,表示类型出现了差异,这种情况下必须有一方是炸弹,不然就不满足题意的输入了
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string find_max(const string& input)
{
//首先上来看一下有没有王炸
if(input.find("joker JOKER")!=string::npos)
{
return "joker JOKER";
}
//分开两幅牌
string left=input.substr(0,input.find('-'));
string right=input.substr(input.find('-')+1);//注意+1,不要把“-”放进第二张牌了
//左牌和右牌的数目=空格数+1;利用算法中的count统计
size_t left_num=count(left.begin(),left.end(),' ')+1;
size_t right_num=count(right.begin(),right.end(),' ')+1;
//如果左面和右面的数量相等,那就说明类型相同
if(left_num==right_num)
{
//首先拿出左面和右面的第一章牌
string left_first=left.substr(0,left.find(' '));
string right_first=right.substr(0,right.find(' '));
//类型相同就比较点数
string compare("345678910JQKA2jokerJOKER");
if(compare.find(left_first) > compare.find(right_first))
{
//如果左大于有
return left;
}
else
{
return right;
}
}
//如果数量不相等,那么有可能是炸弹导致的
if(left_num==4)
{
return left;
}
else if(right_num==4)
{
return right;
}
else//数量不相等,无法比较
{
return "ERROR";
}
}
int main()
{
string input;//接受输入
string ret;//返回情况
while(getline(cin,input))
{
ret=find_max(input);
cout<<ret<<endl;
}
return 0;
}
以上是关于字符串经典题之扑克牌的大小的主要内容,如果未能解决你的问题,请参考以下文章