c语言请编写一个程序检查表达式中的左右圆括号是否匹配
时间: 2024-10-15 18:14:07 浏览: 43
在C语言中,你可以通过栈数据结构来实现括号匹配检查。下面是一个简单的示例程序,它使用一个字符数组表示输入的字符串,并遍历这个数组来检查括号是否匹配:
```c
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h> // 包含isdigit()用于判断字符是否为数字
// 定义匹配的括号对
const char* pairs[] = { "(", ")", "[", "]", "{" , "}" };
bool is_balanced(char str[]) {
stack<char> brackets; // 使用栈来保存左括号
int i;
for (i = 0; str[i] != '\0'; ++i) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') { // 遇到左括号入栈
brackets.push(str[i]);
} else if (str[i] == ')' && !brackets.empty() && pairs[brackets.top()] == '(') {
brackets.pop(); // 如果当前是右括号并且栈顶是对应左括号,则出栈
} else if (str[i] == ']' && !brackets.empty() && pairs[brackets.top()] == '[') {
brackets.pop();
} else if (str[i] == '}' && !brackets.empty() && pairs[brackets.top()] == '{') {
brackets.pop();
} else { // 非括号字符或括号配对不完整,返回false
return false;
}
}
// 检查栈是否为空,若为空说明所有括号都已匹配
return brackets.empty();
}
int main() {
char expr[] = "([]{(})";
bool result = is_balanced(expr);
if (result) {
printf("The expression is balanced.\n");
} else {
printf("The expression is not balanced.\n");
}
return 0;
}
阅读全文