PAT basic 1052 卖个萌 (20分) 测试点2,3 段错误 解释

一、题目描述

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

左手[右手]

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

输入格式:
输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 []内。题目保证每个集合都至少有一个符号,并不超过 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 考察了同一个问题,一开始我看错误提示段错误,仔细看了好几遍感觉存储没什么问题了,没想到啊没想到,居然是数组下界,我惊了。
加上判断最小值就过了,有学习到。

题目合集

在这里呦~

发布了81 篇原创文章 · 获赞 2 · 访问量 1978

猜你喜欢

转载自blog.csdn.net/qq_44352065/article/details/104425230
今日推荐