题解 | #扑克牌大小#
对于扑克牌大小这道题目,如果知道map映射的思想,做起来就会很简单,我们可以先把每张扑克牌上的内容,从字符串按照大小映射为相应数字,这样之后的比较就会变得很简单
- 我们先根据“-”的位置,将两副牌分别放入两个字符串,
- 接下来就可以根据空格的个数,判断两副牌是否为同类型,需要注意,炸弹和对王
- 如果空格个数不同,对炸弹和对王分别判断,不属于这两种类型就可以直接输出ERROR ,这里在判断炸弹和对王的时候,我们可以直接根据字符串长度去判断,更为简单
- 如果空格个数相同,那说明是同类型,那我们就可以直接根据两副牌中第一张扑克比较大小,这里就需要用到我们的map映射了,先分别分离出两副牌中的第一张扑克的内容,直接利用map比较输出即可
#include<iostream> #include<map> #include<string> using namespace std; map<string,int> mp={{"3",3},{"4",4},{"5",5},{"6",6},{"7",7},{"7",7},{"8",8},{"9",9},{"10",10},{"J",11},{"Q",12},{"K",13},{"A",14},{"2",15},{"joker",16},{"JOKER",17}}; int judge_space(string a) { int cnt=0; for(int i=0;i<a.size();i++) { if(a[i]==' ') { cnt++; } } return cnt; } int main() { string str,stra,strb; getline(cin,str); int pos=str.find("-"); int len=str.size(); stra=str.substr(0,pos); strb=str.substr(pos+1,len-pos-1); int spacea=judge_space(stra); int spaceb=judge_space(strb); if(spacea!=spaceb) { if(pos==11) { cout<<stra<<endl; } else if(len-pos-1==11) { cout<<strb<<endl; } else if(pos==7) { cout<<stra<<endl; } else if(len-pos-1==7) { cout<<strb<<endl; } else { cout<<"ERROR"<<endl; } } else { if(spacea==0) { if(mp[stra]>mp[strb]) { cout<<stra<<endl; } else { cout<<strb<<endl; } } else { int posa=stra.find(' '); int posb=strb.find(' '); string aa=stra.substr(0,posa); string bb=strb.substr(0,posb); if(mp[aa]>mp[bb]) { cout<<stra<<endl; } else { cout<<strb<<endl; } } } return 0; }