预备役的那些事--括号匹配

        想必大家都会普通的括号匹配了吧(栈的应用),今天给大家分享一个不同的括号匹配。

        今天就把我们最喜爱的代码用上。上题目。

欢迎大家加入ACM!
要深入的学习ACM的相关知识,首先就必须学会一门编程语言,推荐C/C++。
不过对于初学者,因为没编过多少代码,经常出现变异错误,其实就是语法错误。
现在要你检查一段代码的语法是否否正确。
为了简化问题,我们只检查 (、)、{、} 括号是否匹配了,并且在输入的代码中不包含字符的'(',')','{','}'。
其他语法错误不检查,如 "#include <stdio.h","2 = x",是错误的,但是不检查。

Input

有多组测试数据,每组测试数据有一段代码,该段代码可能在有多行。
每段代码以Ctrl+Z结束。
处理到文件结束。

Output

每组测试数据输出一行。
如果这段代码括号匹配了,输出 Right ,否则输出 Wrong。

Sample Input

#include <stdio.h
int main(){
    int a b;
    while (scanf("%d%d", &a, &b) != EOF) {
        printf("%d\n", a + b);
    }
}
Ctrl+Z
int main(){
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF) {
        printf("%d\n", a + b);
   
}
Ctrl+Z

Sample Output

Right
Wrong

        虽然咱们得输入代码,但实质上还是括号的匹配。只是稍微注意下细节。

#include <iostream>
#include <string.h>

using namespace std;

const int maxn = 1e5;
char a[maxn];           //定义一个栈,但要注意是char类型。
int top;

void push (char x)
{
	a[top ++] = x;
}

char pop()
{
	return a[-- top];
}
string s1;
string s = "";

int main ()
{
	while (cin >> s1 )      //多组输入
	{
		bool out = true;     //做一个标志
		if (s1 == "Ctrl+Z")
		{
			s += s1;         //字符串的拼接,c++特别方便。
		}
		else 
		{
			s += s1;
			continue;          //继续输入字符串
		}
		

		top = 0;
		int len = s.size();

		for (int i = 0;i < len;i ++)        //一一判断括号
		{
			if (s[i] == '(' || s[i] == '{')
			{
				push(s[i]);
			}
			else if (s[i] == ')')
			{
				if (a[top - 1] == '(')
				{
					pop();
				}
				else 
				{
					out = false;
				}
			}
			else if (s[i] == '}')
			{
				if (a[top - 1] == '{')
				{
					pop();
				}
				else 
				{
					out = false;
				}
			}
			if (out == false)  break;
		}
		if (top > 0)  out = false;	//最后检查栈是否为空。
				
	if (out == true)
	{
		cout << "Right" << endl;
	}
	else 
	{
		cout << "Wrong" << endl;
	}
	s1 = "";              //最后对两个字符串初始化,以防接下来的多组数据输入
	s = "";
	
	}
		
	return 0;
}

在最后,,也是卡我的一个部分,,,注意  注意 ,是多组输入,,最后ctrl+z结束程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值