这道题自我感觉较为繁琐,搞了很久,大部分注意点和提示都注释了
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<vector<string> >emotion;//存储表情符号的动态二维数组,在string后的>和emotion前的>之间加个空格,否则认为是重载>>
for(int i=0;i<3;i++){//前三行输入可选符号集,第一行是代表手,第二行是眼,第三行是口
string line;//输入的一行字符串
getline(cin,line);
vector<string>temp;//存储这一行字符串的表情符号
for(int j=0;j<line.size();j++){//遍历一遍这一行的字符串
if(line[j]=='[')//遇到'['字符
for(int k=j+1;k<line.size();k++){//查找']'字符并将'['和']'之间的字符串存储到temp中
if(line[k]==']'){
temp.push_back(line.substr(j+1,k-j-1));//截取line数组中索引由j+1到k-j-1之间的字符,构成表情
break;//退出查找']'的循环,进入下一个表情的查找
}
}
}
//直到现在,每一次输入的一行字符串中所有的表情都已存进temp数组中
//再将每一个temp,即表情符号存入表情符号集合emotion中,第一行是代表手,第二行是眼,第三行是口
emotion.push_back(temp);
}
int N;
cin>>N;
while(N--){
int a,b,c,d,e;
cin>>a>>b>>c>>d>>e;//输入左手、左眼、口、右眼、右手的序号
//emotion[0]是所有“手”的符号集,emotion[1]是所有“眼”的符号集,emotion[2]是所有“口”的符号集
if(a>emotion[0].size()||b>emotion[1].size()||c>emotion[2].size()||d>emotion[1].size()||e>emotion[0].size()||a<1||b<1||c<1||d<1||e<1)
cout<<"Are you kidding me? @\\/@"<<endl;//下标不合法,输出相应字符串
else//否则输出表情,注意输入的值对应的索引要减一
cout<<emotion[0][a-1]<<"("<<emotion[1][b-1]<<emotion[2][c-1]<<emotion[1][d-1]<<")"<<emotion[0][e-1]<<endl;
}
return 0;
}