代码
#include <iostream>
#include <vector>
using namespace std;
const int SIZE = 3;
int main() {
string s[SIZE];
for(int i=0; i<SIZE; i++){
getline(cin, s[i]);
}
vector< vector<string> > v(SIZE);
for(int i=0; i<SIZE; i++){
int start;
for(int j=0; j<s[i].length(); j++){
if(s[i].at(j)=='['){
start = j+1;
}
else if(s[i].at(j)==']'){
string tmp = s[i].substr(start, j-start);
v[i].push_back(tmp);
}
}
}
int k;
cin>>k;
for(int i=0; i<k; i++){
string str = "Are you kidding me? @\\/@";
int t1, t2, t3, t4, t5;
cin>>t1>>t2>>t3>>t4>>t5;
if(t1>v[0].size() || t5>v[0].size()
|| t2>v[1].size() || t4>v[1].size()
|| t3>v[2].size() || t1<1 || t2<1
|| t3<1 || t4<1 || t5<1){
cout<<str<<endl;
}
else{
str = v[0][t1-1] + "(" + v[1][t2-1] + v[2][t3-1] + v[1][t4-1] + ")" + v[0][t5-1];
cout<<str<<endl;
}
}
return 0;
}
注解
1、二重vector:
vector< vector<string> > v(SIZE);
2、如何从读入的行中分解出需要的字符,是本题的关键:按顺序一个字符一个字符读入,读到左括号,就设置字符的start。读到右括号,就意味着字符结束,把 start 到 j-start 的子串取出,放到vector中。
for(int i=0; i<SIZE; i++){
int start;
for(int j=0; j<s[i].length(); j++){
if(s[i].at(j)=='['){
start = j+1;
}
else if(s[i].at(j)==']'){
string tmp = s[i].substr(start, j-start);
v[i].push_back(tmp);
}
}
}
3、一个坑点:string str = “Are you kidding me? @\/@”;
这句话有个转义字符。要想输出/,\是转义字符,需要前面加一个\。
4、另一个坑点:<1和>v.size()这两种都是不合题意的情况,两种情况在测试用例中均存在。不要漏写<1的情况。
if(t1>v[0].size() || t5>v[0].size()
|| t2>v[1].size() || t4>v[1].size()
|| t3>v[2].size() || t1<1 || t2<1
|| t3<1 || t4<1 || t5<1)