题目连接:请点击
思路:这道题主要在于获得前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;
}