在线编译器 C

#include <stdio.h> int is_correct_brackets(char s[]){ int i=0; int open=0,close=0; while(s[i]!='.'){ if(s[i]=='('){ open++; i++; }else if(s[i]==')'){ close++; i++; } } if(open==close){ return 1; }return 0; } int main() { char s[100]="(()())."; if(is_correct_brackets(char s[])){ printf("YES\n"); }else{ printf("NO\n"); } return 0; }
这段代码试图检查括号序列是否匹配,但存在几个问题。

首先,在 `main` 函数中调用 `is_correct_brackets` 时,传参方式写错了。`char s[]` 是函数定义时的参数声明,调用时直接写数组名 `s` 即可。

其次,这个函数只统计了左括号和右括号的数量是否相等,但并没有检查括号的顺序是否正确。例如 `")("` 这种序列左右括号数量相等,但顺序是错误的,应该返回不匹配。

- 在 `main` 函数中调用 `is_correct_brackets` 时,应该直接写 `s`,而不是 `char s[]`。
- 你的函数需要记录当前未匹配的左括号数量,而不是分别统计左右括号总数。当遇到右括号时,如果当前没有未匹配的左括号,则直接返回不匹配。