想必大家都会普通的括号匹配了吧(栈的应用),今天给大家分享一个不同的括号匹配。
今天就把我们最喜爱的代码用上。上题目。
欢迎大家加入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结束程序。