给你如下的函数接口:int match char exp;其中 exp 为需判断括号是否正确的表达式返回值为1或0如果为1则表示括号匹配0表示不匹配。裁判测试程序样例:#include stdioh #define N 20 int match char exp; int main char sN; int flag; scanfss; flag=match
答案:
思路:利用栈来判断括号是否匹配。遍历字符串中的每一个字符,如果是左括号则入栈,如果是右括号则弹出栈顶元素判断是否匹配。遍历完整个字符串后,如果栈为空则说明括号匹配,否则不匹配。
代码实现:
int match(char *exp) { int top = -1; // 栈顶指针初始化为-1 char stack[N]; // 定义栈 for(int i = 0; exp[i] != '\0'; i++) { // 遍历字符串 if(exp[i] == '(' || exp[i] == '[' || exp[i] == '{') { // 如果是左括号则入栈 stack[++top] = exp[i]; } else if(exp[i] == ')' || exp[i] == ']' || exp[i] == '}') { // 如果是右括号则弹出栈顶元素判断是否匹配 if(top < 0) { return 0; // 栈为空,不匹配 } else if((exp[i] == ')' && stack[top] == '(') || (exp[i] == ']' && stack[top] == '[') || (exp[i] == '}' && stack[top] == '{')) { top--; } else { return 0; // 不匹配 } } } if(top < 0) { return 1; // 栈为空,匹配 } else { return 0; // 不匹配 } }
原文地址: https://www.cveoy.top/t/topic/bjYx 著作权归作者所有。请勿转载和采集!