PAT乙级 1052 卖个萌 (20分)

1052 卖个萌 (20分)

感觉20分的题目拿满分还是有点难度的。

测试点2又没有通过。。不知道原因

测试点2没有通过是因为我把continue写成了break!!!!!!

【思路】

首先提取出各个部分的表情符号。获取输入,在每一个输入时判断是否超出,如果超出警告,没有则对应输出表情。

【碰到的问题】

1.如何提取表情部件? 遍历每行,把位于[]中间的存为一个string,放入另一个数组中

2.如何输入表情?getline,因为中间有空格所以需要使用getline

3.输出错误时格式不对?‘\’是转义字符,需要在前面添加一个\输出

4.在vs里输出结果不正确?我觉得可能是不在ASCII码表中的符号没法正常输出

#include<iostream>
#include<string>
using namespace std;

void suan(string s,string s1[])
{
	int t = 0;
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == '[')
		{
			i++;
			while (s[i] != ']')
			{
				s1[t] += s[i];
				i++;
			}
			t++;
		}
	}
}

int main()
{
	string a, b, c,d[10],e[10],f[10];
	getline(cin, a);
	getline(cin, b);
	getline(cin, c);
	int sum = 0; cin >> sum;
	suan(a, d);//提取表情
	suan(b, e);
	suan(c, f);
	for (int i = 0; i < sum ; i++)
	{
		int a1, b1, c1, d1, f1;
		cin >> a1 >> b1 >> c1 >> d1 >> f1;
		if (d[a1 - 1].empty() || d[f1 - 1].empty() || e[b1 - 1].empty() || e[d1 - 1].empty() || f[c1 - 1].empty())
		{
			cout << "Are you kidding me? @\\/@" << endl; continue;
		}
		cout << d[a1 - 1] << "(" << e[b1 - 1] << f[c1 - 1] << e[d1 - 1] << ")" << d[f1 - 1]<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38386991/article/details/104863870
今日推荐