在线编译器 C

#include <stdio.h> int is_correct_brackets(char s[]){ int i=0; int open=0,close=0; while(s[i]!='.'){ if(open>=close){ if(s[i]=='('){ open++; i++; }else if(s[i]==')'){ close++; i++; } }else return 0; } return open==close; } int main() { char s[100]="(()())."; if(is_correct_brackets(s)){ printf("YES\n"); }else{ printf("NO\n"); } return 0; }
这段代码试图检查括号序列是否合法,但逻辑上有问题。它用两个计数器分别记录左括号和右括号的数量,并检查是否在任何时刻右括号数量超过左括号。但循环条件 `s[i]!='.'` 假设字符串以点号结尾,而实际输入可能没有点号。另外,当遇到非括号字符时,代码会跳过吗?目前没有处理其他字符的情况。

- 循环条件 `s[i]!='.'` 是硬编码的终止符,但实际字符串可能没有点号。考虑如何正确遍历字符串直到末尾(比如用 `s[i] != '\0'`)。
- 当遇到既不是 '(' 也不是 ')' 的字符时,代码会直接进入下一轮循环吗?检查一下 `while` 循环内部,如果字符不是括号,`i` 没有增加,会导致死循环。需要处理这种情况。