PAT:1052.卖个萌点击打开链接
参考了萌萌小姐姐的解法,学到了vector还可以开两层!!!还有substr函数!!!
小姐姐的解法参考点击打开链接
写是为了加深自己印象,顺便做个学习记录~\(≧▽≦)/~啦啦啦
首先:因为输入有空格!!所以要用getline(cin,some),这个昨天的题也用到了,可以读空格等等反正是一行
第二:不知道字符串长度所以用string存,眼手嘴每个开一个vector保存内部内容!然后全部依次压到一个大的vector里面!!!!!以后调用v[0]v[1]v[2],代表手眼嘴这一大类,里面的在后面加数字调用比如v[0][1],就是手的第一个表情
vector<vector<string> > v;
开的大堆
第三:一个手有可能由两个字符组成,所以先循环找到左括号,再循环找到右括号,用substr()把两个括号之间的字符全部压到堆里面去!!!堆是用string开的!!所以可以不止存一个字符。
第四:要判断是否越界~若用户选的字符不存在,vector.length()是最后一个数组下标的数字(即长度-1),vector.size()是长度,所以如果大于vector.size()或者小于1的话就要输出"Are you kidding me? @\/@"
然而‘\’是转义字符,所以!!要变成'\\'
即写代码的时候是
cout << "Are you kidding me? @\\/@"<< endl;
学习很多!!但是要记住啊!!
向小姐姐学习!!!
完整code:
#include<vector>
#include<iostream>
using namespace std;
vector<vector<string> > v;//先说段错误!!!以为会爆结果不是这个原因
int main()
{for(int i=0;i<3;i++){string s;getline(cin,s);vector<string> row;int j=0,k=0;while(j<s.length()){if(s[j]=='['){while(k++<s.length()){if(s[k]==']'){row.push_back(s.substr(j+1,k-j-1));//获取字符串中一段 break;}}}j++; }v.push_back(row);} int n;cin >> n;while(n--){int a,b,c,d,e;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;}else{cout << v[0][a-1] << "(" << v[1][b-1] << v[2][c-1] << v[1][d-1] << ")" <<v[0][e-1]<< endl;}}}