【字符串】ZSC-勤奋的计算机系学生

Description
计算机系的同学从大一就开始学习程序设计语言了。初学者总是容易写出括号不匹配的程序。至今你仍然清楚地记得,那天上机的时候你的程序编译出错,虽然你使尽了吃奶的力气也没有把错误逮着。你实在没有办法只得举手向老师请教。结果老师走过来一看,板着脸,指着屏幕,很不高兴地冲着你说:“括号!括号!括号没有匹配!”自那以后,你痛定思痛决定写一个程序,帮助分析程序的括号是否出错,以免再出洋相。为了简化工作,你假定程序的注释、字符常量、字符串常量中都不包含括号,同时你只检查()[]{}这三种括号。

Input
输入为多组数据,最后一组数据以@结束,其余每组数据以#结束。@与#不会出现在正常程序中。每个程序含有不超过255个括号字符,程序长度不确定。

Output
每组数据输出一行,如果括号匹配无误则输出"Wonderful",括号匹配出现问题则输出"Be Careful"(请注意大小写和拼写错误,这些问题都将导致Wrong Answer)。 你只要关心括号是否匹配,不需要在意其余的语法错误。

Sample Input

int main()
{ 
    return 0;
}
#
int main()
{
@

Sample Output

WonderfulBe 
Careful  

#include <iostream>
using namespace std;
int main()
{	//用数组模拟栈的功能
	char ch,s[300];
	int top=0;
	while(cin>>ch)
	{	
		//↓读取到右括号就压入栈
		if(ch=='('||ch=='['||ch=='{') s[++top]=ch;
		//↓读取到右括号,则让栈弹出最上面的字符,看看是否匹配,匹配则消除该字符
		if(ch==')'&&s[top]=='('||ch==']'&&s[top]=='['||ch=='}'&&s[top]=='{') top--;
		//↓如果不匹配,则压入栈
		else if(ch==')'||ch==']'||ch=='}') s[++top]=ch;

		//↓遇到“#”和“@”时,对栈里的情况进行判断
		if(ch=='#'||ch=='@')
		{
			//↓如果栈里为空,即括号增删次数相同,意思是各括号匹配,则输出"Wonderful"
			if(top==0)
			{
				cout<<"Wonderful"<<endl;
			}else
			{
				cout<<"Be Careful"<<endl;
			}
			top=0;			//记得把栈里的情况初始化
		}

		//识别到符号“@”,先进行↑上面的判断,再退出↓
		if(ch=='@') return 0;
	}
	return 0;
}
posted @ 2018-12-13 14:39  楠木v  阅读(185)  评论(0编辑  收藏  举报