版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LightInDarkness/article/details/83004245
萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:
[左手]([左眼][口][右眼])[右手]
现给出可选用的符号集合,请你按用户的要求输出表情。
输入格式:
输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 []
内。题目保证每个集合都至少有一个符号,并不超过 10 个符号;每个符号包含 1 到 4 个非空字符。
之后一行给出一个正整数 K,为用户请求的个数。随后 K 行,每行给出一个用户的符号选择,顺序为左手、左眼、口、右眼、右手——这里只给出符号在相应集合中的序号(从 1 开始),数字间以空格分隔。
输出格式:
对每个用户请求,在一行中输出生成的表情。若用户选择的序号不存在,则输出 Are you kidding me? @\/@
。
输入样例:
[╮][╭][o][~\][/~] [<][>]
[╯][╰][^][-][=][>][<][@][⊙]
[Д][▽][_][ε][^] ...
4
1 1 2 2 2
6 8 1 5 5
3 3 4 3 3
2 10 3 9 3
输出样例:
╮(╯▽╰)╭
<(@Д=)/~
o(^ε^)o
Are you kidding me? @\/@
分析:
这是一个字符串处理的问题,因为一开始给定的表情符号中可能会有空格,所以这里选用getline()。对'[' ']' ' '三个字符做一下特殊处理,将其他内容存入字符串数组即可。
如果说我踩了的什么坑的话,就是输入数据可能会小于1。一开始没对此加判断,样例2,3没过,加上就好了。
#include<iostream>
using namespace std;
int main(){
string hand[10000], eyes[10000], mouth[10000];
string s;
int K;
int cnt1 = 1, cnt2 = 1, cnt3 = 1;
for(int i = 0; i < 3; i++){
getline(cin, s);
//依次为头、眼、手
if(i == 0){
for(int i = 0; i < s.length(); i++){
if(s[i] == '[' || s[i] == ' ') continue;
else if(s[i] == ']') cnt1++;
else hand[cnt1] += s[i];
}
}else if(i == 1){
for(int i = 0; i < s.length(); i++){
if(s[i] == '[' || s[i] == ' ') continue;
else if(s[i] == ']') cnt2++;
else eyes[cnt2] += s[i];
}
}else{
for(int i = 0; i < s.length(); i++){
if(s[i] == '[' || s[i] == ' ') continue;
else if(s[i] == ']') cnt3++;
else mouth[cnt3] += s[i];
}
}
}
cin >> K;
for(int i = 0; i < K; i++){
int temp1, temp2, temp3, temp4, temp5;
cin >> temp1 >> temp2 >> temp3 >> temp4 >> temp5;
if(temp1 >= cnt1 || temp5 >= cnt1 || temp2 >= cnt2 || temp4 >= cnt2 || temp3 >= cnt3 ||
temp1 < 1 || temp2 < 1 || temp3 < 1 || temp4 < 1 || temp5 < 1){
cout << "Are you kidding me? @\\/@" << endl;
}else{
cout << hand[temp1] << '(' << eyes[temp2] << mouth[temp3] << eyes[temp4] << ')' << hand[temp5] << endl;
}
}
}