Online Compiler C

#include <stdio.h> //( =40 )=41 .=46 int is_correct_brackets(char s[]) { int a = 0,i=0; while (s[i] != '.') { if (s[i] == '(') a = a + 1; else if (s[i] == ')') a = a - 1; if (a < 0) return 0; i++; } if (a == 0) return 1; else return 0; } int main() { printf("%d", is_correct_brackets("()()()."); return 0; }
这段代码定义了一个函数 `is_correct_brackets`,用来检查一个以点号结尾的字符串中的括号是否匹配。它遍历字符串直到遇到点号,遇到左括号就加一,右括号就减一,如果中途计数器变成负数说明右括号多了,返回0。最后检查计数器是否为0,是则返回1,否则返回0。主函数测试了字符串 "()()()."。

- 你的代码逻辑基本正确,但注意点号本身是字符串的结束标志,如果字符串中有点号出现在括号之前,比如 "().()",你的函数会在第一个点号处停止,可能漏掉后面的括号。考虑一下点号是否应该作为字符串的终止符,还是应该遍历整个字符串直到末尾。
- 另外,你的函数假设字符串一定包含点号,如果输入字符串没有点号,while循环会一直访问越界内存,导致未定义行为。可以思考如何让函数更通用,比如用字符串结束符 '\0' 作为终止条件。