当前位置: 代码迷 >> 综合 >> PAT 1052.卖个萌
  详细解决方案

PAT 1052.卖个萌

热度:80   发布时间:2023-11-17 23:10:40.0

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