在线编译器 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; } if(open==close){ return 1; }else return 0; } int main() { char s[100]="(()())."; if(is_correct_brackets(s)){ printf("YES\n"); }else{ printf("NO\n"); } return 0; }
这段代码检查一个以点号结尾的字符串中的括号是否匹配。它通过统计左括号和右括号的数量,并确保在遍历过程中右括号数量不超过左括号数量,最后两者数量相等来判断。

- 你的代码在遇到非括号字符(比如字母或空格)时会直接跳过吗?目前只有遇到 '(' 或 ')' 时才会移动索引 i,其他字符会导致死循环。你需要处理其他字符的情况。
- 你的条件 `if(open>=close)` 放在循环开头,但每次循环都应该检查这个条件,而不是只在遇到括号时才检查。考虑把条件判断放在更合适的位置,确保在读取每个字符后都进行验证。