编程语言
首页 > 编程语言> > PTA 乙级 1052 卖个萌 (20分) C++

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

作者:互联网

 

使用格式化字符串"%[^...]",这种字符串的作用类似于"%s",前者使scanf读到^后面的字符,但是后者会读取字符串到空白字符(空格、换行、制表符等等),相当于用户可以自定义scanf的行为(只能用char字符串去存储输入得到的格式化字符串)

利用vector<vector<string>>来存储所有表情,进行push_back()括号内必须为vector<string>(意味着还需要创建另一个vector存储表情)

注意:

 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 }

 

标签:1052,20,int,卖个,back,vector,&&,字符串,scanf
来源: https://www.cnblogs.com/SCP-514/p/13527093.html