题目传送门<==戳这
一开始我用的scanf格式化输入发现只能输入样例第一行
后来才发现可能会有空格。而scanf不能读入空格,因此不能用scanf。
选择用getline一次性读入一整行的字符串,然后运用双指针思想,分别指向 ’ [ ’ 和 ’ ] ’
再用substr截取括号内的部分,并用vector储存(长度不确定,不好开数组)。
又因为有三行输入,所以采用 vector<vector< string > > 嵌套。
上代码:
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int main(){
vector<vector<string> >v; //vector嵌套for(int i=1;i<=3;i++){
string s;getline(cin,s);int j=0,k=0; //左(j)右(k)指针vector<string> v1; //临时vectorwhile(j<s.length()){
//外层循环,左指针移动if(s[j]=='['){
k++;while(k<s.length()){
//内层循环,右指针移动if(s[k]==']'){
v1.push_back(s.substr(j+1,k-j-1));break;}k++;}}j++;}v.push_back(v1);}int n;cin>>n;int a,b,c,d,e;for(int i=1;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)printf("Are you kidding me? @\\/@\n");//注意为什么要减 1 ,因为vector下标从 0 开始else cout <<v[0][a-1]<<"("<<v[1][b-1]<<v[2][c-1]<<v[1][d-1]<<")"<<v[0][e-1]<<endl; }
}