1. 程式人生 > >PAT-乙-1052 1052 賣個萌 (20 分)

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)

結果

在這裡插入圖片描述