Online Compiler C

#include <stdio.h> int main() { char stack[1005]; int top = 0; int ch; int valid = 1; while ((ch = getchar()) != EOF && ch != '\n' && ch != '\r') { if (ch == '(' || ch == '[' || ch == '{') { stack[top++] = ch; } else if (ch == ')' || ch == ']' || ch == '}') { if (top == 0) { valid = 0; break; } char last = stack[top - 1]; if ((ch == ')' && last == '(') || (ch == ']' && last == '[') || (ch == '}' && last == '{')) { top--; } else { valid = 0; break; } } } if (valid && top == 0) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
这段代码实现了一个括号匹配检查程序。它从标准输入读取一行字符,判断其中的圆括号、方括号和花括号是否成对且正确嵌套。

代码使用数组模拟栈结构,遇到左括号就入栈,遇到右括号就检查栈顶是否匹配。如果匹配则出栈,否则标记为无效。最后检查栈是否为空且没有匹配错误。

- 注意代码只读取到换行符或EOF就停止,但题目可能要求读取多行输入。如果输入包含多行,当前逻辑会只处理第一行。
- 当遇到右括号且栈为空时,代码直接跳出循环,但此时可能还有后续字符未处理。考虑是否需要继续读取并忽略剩余字符,或者直接结束。