PTA 乙級 1052 賣個萌 (20分) C++
阿新 • • 發佈:2020-08-19
使用格式化字串"%[^...]"
,這種字串的作用類似於"%s"
,前者使scanf讀到^後面的字元,但是後者會讀取字串到空白字元(空格、換行、製表符等等),相當於使用者可以自定義scanf的行為(只能用char字串去儲存輸入得到的格式化字串)
利用vector<vector<string>>來儲存所有表情,進行push_back()括號內必須為vector<string>(意味著還需要建立另一個vector儲存表情)
注意:
- 測試點1,2:注意下標越界的問題,輸入的數字從1開始(表情數字輸入包含0和複數負數)
- 手和眼之間有 '(' ')'
- 輸出的轉義字元,"Are you kidding me? @\\/@"
1 #include<iostream> 2 #include<vector> 3 4 using namespace std; 5 6 int main() { 7 /*計數*/ 8 int n = 0, f[5]; 9 char c; 10 /*單個表情*/ 11 char ss[5]; 12 /*手眼口所有表情*/ 13 vector<vector<string>> body; 14 for (int i = 0; i < 3; i++) { 15 vector<string> s; 16 while ((c = getchar()) != '\n') { 17 if (c == '[') { 18 scanf("%[^]]", ss); //利用scanf的格式化輸入,識別"[]" 19 s.push_back(ss); 20 } 21 } 22 body.push_back(s); 23 } 24 cin >> n; 25 for (int i = 0; i < n; i++) { 26 for (int j = 0; j < 5; j++) cin >> f[j]; 27 if ((f[0] > 0 && f[0] <= body[0].size()) 28 && (f[1] > 0 && f[1] <= body[1].size()) 29 && (f[2] > 0 && f[2] <= body[2].size()) 30 && (f[3] > 0 && f[3] <= body[1].size()) 31 && (f[4] > 0 && f[4] <= body[0].size())) { //防止下標越界 32 cout << body[0][f[0] - 1] << '(' << body[1][f[1] - 1] 33 << body[2][f[2] - 1] << body[1][f[3] - 1] << ')' 34 << body[0][f[4] - 1] << endl; 35 } 36 else { 37 cout << "Are you kidding me? @\\/@" << endl; //注意'\'轉義字元,'\\'才可輸出'\' 38 } 39 40 } 41 }