題目信息
萌萌噠表情符號通常由“手”潜秋、“眼”、“口”三個主要部分組成。簡單起見尿招,我們假設(shè)一個表情符號是按下列格式輸出的:
[左手]([左眼][口][右眼])[右手]
現(xiàn)給出可選用的符號集合诀豁,請你按用戶的要求輸出表情窄刘。
輸入格式:
輸入首先在前三行順序?qū)?yīng)給出手、眼舷胜、口的可選符號集娩践。每個符號括在一對方括號[]內(nèi)。題目保證每個集合都至少有一個符號烹骨,并不超過10個符號翻伺;每個符號包含1到4個非空字符。
之后一行給出一個正整數(shù)K展氓,為用戶請求的個數(shù)穆趴。隨后K行,每行給出一個用戶的符號選擇遇汞,順序為左手未妹、左眼、口空入、右眼络它、右手——這里只給出符號在相應(yīng)集合中的序號(從1開始),數(shù)字間以空格分隔歪赢。
輸出格式:
對每個用戶請求化戳,在一行中輸出生成的表情。若用戶選擇的序號不存在,則輸出“Are you kidding me? @/@”点楼。
輸入樣例:
[╮][╭][o][][/] [<][>]
[╯][╰][^][-][=][>][<][@][⊙]
[Д][▽][_][ε][^] ...
4
1 1 2 2 2
6 8 1 5 5
3 3 4 3 3
2 10 3 9 3
輸出樣例:
╮
(╯▽╰)╭
<(@Д=)/~
o(ε)o
Are you kidding me? @/@
分析(柳神)
因為不知道一行有多少個表情扫尖,所以用一個string類型的不定長二維數(shù)組vector存儲表情包,以及可以調(diào)用v.size()順便解決不知道一行有多少個表情的問題~~
不定長數(shù)組共三行掠廓,分別對應(yīng)輸入用例的三行.只不過在存儲如數(shù)組之前把它們的方括號去掉在存儲.這里可以用string的substr方法實現(xiàn)换怖。然后根據(jù)輸入的數(shù)字序號輸出對應(yīng)的表情。耶耶耶能從這道題里面復(fù)習(xí)好多知識點呢~~~
注意:
1.“Are you kidding me? @/@”的’\’是轉(zhuǎn)義字符蟀瞧,想要輸出’\’就要用’\’表示~
2.第一個測試點里面包含了空格沉颂,所以用cin會失敗的,要用getline才能讀入一行字符串~
代碼
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<string> v[3];
for(int i=0;i<3;i++){
string s;
getline(cin,s);
int j=0,k=0;
while(j<s.length()){
if(s[j]=='['){
for(k=0;k<s.length()-j;k++){
if(s[k+j]==']'){v[i].push_back(s.substr(j+1,k-1));break;}
}
}
j++;
}
}
int n,a,b,c,d,e;cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>c>>d>>e;
if(a>v[0].size()||b>v[1].size()||c>v[2].size()||d>v[1].size()||
e>v[0].size()||a<1||b<1||c<1||d<1||e<1){
cout<<"Are you kidding me? @\\/@"<<endl;
continue;
}
cout<<v[0][a-1]<<"("<<v[1][b-1]<<v[2][c-1]<<v[1][d-1]<<")"<<v[0][e-1]<<endl;
}
return 0;
}