一、题目描述
萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:
左手[右手]
现给出可选用的符号集合,请你按用户的要求输出表情。
输入格式:
输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 []内。题目保证每个集合都至少有一个符号,并不超过 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? @/@
二、代码
//1052
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string>hand;
vector<string>eye;
vector<string>mouth;
string temp,temp1;
int counthand=0, counteye=0, countmouth=0;
//接收手
getline(cin, temp);
int i, j;
for (i = 0; i < temp.size(); i++)
{
if (temp[i] == '[')
{
for (j = 1; temp[i+j] != ']'; j++)
;
hand.push_back( temp.substr(i+1, j-1));
counthand++;
i += j ;
}
}
//接收眼睛
getline(cin, temp);
for (i = 0; i < temp.size(); i++)
{
if (temp[i] == '[')
{
for (j = 1; temp[i + j] != ']'; j++)
;
eye.push_back(temp.substr(i + 1, j - 1));
counteye++;
i += j;
}
}
//接收嘴
getline(cin, temp);
for (i = 0; i < temp.size(); i++)
{
if (temp[i] == '[')
{
for (j = 1; temp[i + j] != ']'; j++)
;
mouth.push_back(temp.substr(i + 1, j - 1));
countmouth++;
i += j;
}
}
int n;
int a[5];
cin >> n;
for (i = 0; i < n; i++)
{
for (j = 0; j < 5; j++)
{
cin >> a[j];
}
if (a[0] > counthand || a[4] > counthand || a[1] > counteye || a[3] > counteye || a[2] > countmouth
||a[0]<1||a[1]<1||a[2]<1||a[3]<1||a[4]<1)
//测试点2 3 错误原因,题目输入中会有非法数据,要判断下界,过分真实
{
cout << "Are you kidding me? @\\/@"<<endl;
continue;
}
else
{
cout << hand[a[0] - 1] << "(" << eye[a[1] - 1] << mouth[a[2] - 1] << eye[a[3] - 1] << ")" << hand[a[4] - 1] << endl;
}
}
return 0;
}
三、运行结果
四、测试点2 3 错误原因
测试点2,3 考察了同一个问题,一开始我看错误提示段错误,仔细看了好几遍感觉存储没什么问题了,没想到啊没想到,居然是数组下界,我惊了。
加上判断最小值就过了,有学习到。
题目合集
扫描二维码关注公众号,回复:
9531091 查看本文章