在线编译器 C

#include <stdio.h> //( =40 )=41 .=46 int is_correct_brackets(char s[]){ if(('s[]'-46)%81==0)return 1; else return 0; } int main() { printf("%c", is_correct_brackets(()().)); return 0; }
这段代码试图检查括号字符串是否合法,但存在多个问题。

首先,`main` 函数中调用 `is_correct_brackets(()().)` 的写法是错误的,因为 `(()().)` 不是合法的 C 语言字符串字面量,它会被编译器当作表达式解析,导致语法错误。

其次,`is_correct_brackets` 函数内部的判断逻辑 `('s[]'-46)%81==0` 完全错误。这里 `'s[]'` 不是合法的字符常量,而且这个计算与括号匹配的检查毫无关系。括号匹配需要遍历字符串,使用计数器或栈来确保左右括号成对且顺序正确。

- 你需要先修正 `main` 函数中的调用,将括号字符串用双引号括起来,例如 `"(()().)"`。
- 然后重写 `is_correct_brackets` 函数,让它遍历字符串中的每个字符,遇到左括号增加计数,遇到右括号减少计数,并确保计数不会变成负数,最后计数为0才返回1。