PAT 1052 卖个萌

题目连接:请点击
思路:这道题主要在于获得前3行的表情符号。先用if判断找到‘[’随后while循环直到找到’]’ 这中间的字符就是一个表情符号。(见process()函数)
注1:觉得这个题有个很坑的地方就是那个“Are you kidding me? @/@”里面的“\”这个斜线想要输出应当使用“\”(第一个\是转义字符)否则不会输出。这个bug找了30分钟。
代码:

#include<iostream>
#include<cstring>
using namespace std;
void process(string str,string sym[31]){
	int pos=0;
	for(int i=0;i<str.length();i++){
		if(str[i]=='['){
			int j=i;
			while(str[j]!=']') j++;
			sym[pos]=str.substr(i+1,j-i-1);
			i=j;
			pos++;
		}
	}
}
int main(){
	string hand[21]="",eye[21]="",mouth[21]="",str;
	getline(cin,str);//第1个测试用例第一行有空格要有getline cin遇到空格停止读取 
	process(str,hand);
	getline(cin,str);
	process(str,eye);
	getline(cin,str);
	process(str,mouth);
	int K,pos=0;
	cin>>K;
	string exp[K];
	for(int i=0;i<K;i++){
		for(int j=0;j<5;j++){
			int num; cin>>num;
			if(j==0||j==4){
				if(hand[num-1]==""){
					exp[pos]="Are you kidding me? @\\/@";
					break;
				}else exp[pos].append(hand[num-1]);
			} 
			if(j==1||j==3){
				if(eye[num-1]==""){
					exp[pos]="Are you kidding me? @\\/@";
					break;
				}else {
					if(j==1) exp[pos].append("(");
					exp[pos].append(eye[num-1]);
					if(j==3) exp[pos].append(")");
				}
			}
			if(j==2){
				if(mouth[num-1]==""){
					exp[pos]="Are you kidding me? @\\/@";
					break;
				}else exp[pos].append(mouth[num-1]);
			}
		}
		pos++;
	}
	for(int i=0;i<pos;i++) cout<<exp[i]<<endl;
	return 0;
}
上一篇:[PAT] 1052 Linked List Sorting


下一篇:1052 卖个萌,C