题目
欢迎大家加入ACM!
要深入的学习ACM的相关知识,首先就必须学会一门编程语言,推荐C/C++。
不过对于初学者,因为没编过多少代码,经常出现变异错误,其实就是语法错误。
现在要你检查一段代码的语法是否否正确。
为了简化问题,我们只检查 (、)、{、} 括号是否匹配了,并且在输入的代码中不包含字符的'(',')','{','}'。
其他语法错误不检查,如 "#include <stdio.h","2 = x",是错误的,但是不检查。
输入
有多组测试数据,每组测试数据有一段代码,该段代码可能在有多行。
每段代码以Ctrl+Z结束。
处理到文件结束。
输出
每组测试数据输出一行。
如果这段代码括号匹配了,输出 Right ,否则输出 Wrong。
样例输入
#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
样例输出
Right
Wrong
代码如下(代码有错误)
#include<stdio.h> #define size 30 int stack[30]; int top=0; int flag = 1; void push(char x) { if (top < size) { stack[top] = x; top++; } } char pop() { if (top == 0) return '\0'; top--; return stack[top]; } void check(char x, char y) { if (x == '#') { printf("Wrong"); flag = 0; } if (x!=y) { printf("Wrong"); flag = 0; } } int main() { char ch, out; push('#'); ch = getchar(); while (ch != 'Ctrl+Z') { switch (ch) { case'(': case'[': case'{':push(ch); break; case')':out = pop(); check(out, '('); break; case']':out = pop(); check(out, '['); break; case'}':out = pop(); check(out, '{'); break; } if (flag == 0) return 0; ch = getchar(); } out = pop(); if (out == '#') printf("Right"); else printf("Wrong"); return 0; }