天天看點

PTA乙級1052,賣個萌

這道題自我感覺較為繁瑣,搞了很久,大部分注意點和提示都注釋了

#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;
        }