PTA 乙级 1052 卖个萌 (20分) C++

PTA 乙级 1052 卖个萌 (20分) C++

 

使用格式化字符串"%[^...]",这种字符串的作用类似于"%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 }

PTA 乙级 1052 卖个萌 (20分) C++

 

上一篇:开启MySQL日志


下一篇:最长M字段和(1052 1115 1053)