PAT-乙-1052 1052 賣個萌 (20 分)
阿新 • • 發佈:2018-12-16
程式碼
#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)