PTA 乙级——1052 卖个萌 C++实现

题目 卖个萌

萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:

[ 左 手 ]([ 左 眼 ][ 口] [ 右 眼 ])[ 右 手 ]

现给出可选用的符号集合,请你按用户的要求输出表情。

输入格式:
输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 []内。题目保证每个集合都至少有一个符号,并不超过 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? @/@

分析

记一下踩的坑。

首先是这些符号有的是占了两个字符的,所以不能用char的数组或者向量存储。

然后是最后不存在的时候输出的“Are you kidding me? @/@”这句话里,第一个斜杠要转义gg

以及最后判断用户选择符号的输入要大于0才行

在这里插入图片描述

代码

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 

using namespace std;

void getEmoji(vector<string> &emoji, int&num)  // 输入存储
{
	string s;
	getline(cin, s);

	int i = 0;
	while (i < s.length())
	{
		if (s[i] == '[')
		{
			int j;
			for (j = 1; j < s.length(); j++)
			{
				if (s[i+j] == ']')
					break;
			}
			emoji.push_back(s.substr(i+1, j-1));
			num++;
			i = i + j;
		}
		else
			i++;
	}

}

int main()
{
	vector<string> hand, eye, mouth;
	int handnum=0, eyenum=0, mouthnum=0;
	getEmoji(hand, handnum);
	getEmoji(eye, eyenum);
	getEmoji(mouth, mouthnum);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++)    //  输出
	{
		int lh, le, m, re, rh;
		scanf("%d%d%d%d%d", &lh, &le, &m, &re, &rh);
		if ((lh <= handnum) && (rh <= handnum) && (le <= eyenum) && (re <= eyenum) && (m <= mouthnum) && (lh >= 1) && (rh >= 1) && (le >= 1) && (re >= 1) && (m >= 1))
			cout << hand[lh - 1] << '(' << eye[le - 1] << mouth[m - 1] << eye[re - 1] << ')' << hand[rh - 1] << endl;
		else
			printf("Are you kidding me? @\\/@\n");
	}

}

你可能感兴趣的:(PTA-乙级)