PAT-乙-1052 1052 卖个萌 (20 分)

在这里插入图片描述
在这里插入图片描述

代码

#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)

结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhanggirlzhangboy/article/details/83239170
今日推荐