1.假设一个算术表达式中包含圆括号,方括号和花括号 3种类型的括号,编写一个判别表达式中的括号是否正确匹配的函数 correct(char * exp, int max),其中,传入参数为表达式和表达式长度。
时间: 2024-10-24 20:18:13 浏览: 49
要编写一个判断算术表达式中括号是否正确匹配的函数,你可以使用栈这种数据结构。栈的特点是后进先出,当遇到左括号时,将其压入栈中;遇到右括号时,检查栈顶元素是否与其配对,如果配对则弹出栈顶元素,如果不配对则返回false。当遍历完整个表达式后,如果栈为空,则说明所有括号都正确匹配,返回true;否则,返回false。
以下是函数`correct`的大致伪代码实现:
```c
bool correct(char* exp, int max) {
stack<char> brackets;
for (int i = 0; i < max && exp[i] != '\0'; i++) {
if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{') { // 遇到左括号
brackets.push(exp[i]);
} else if (brackets.empty() || exp[i] != ')' && exp[i] != ']' && exp[i] != '}') { // 非终止字符
continue;
} else { // 遇到右括号
char topBracket = brackets.top();
brackets.pop();
if ((topBracket == '(' && exp[i] != ')') ||
(topBracket == '[' && exp[i] != ']') ||
(topBracket == '{' && exp[i] != '}')) { // 括号不匹配
return false;
}
}
}
return brackets.empty(); // 如果还有剩余的括号未匹配,则不正确
}
```
这个函数接受一个字符串`exp`和其最大长度`max`,遍历字符串的同时处理括号,最后返回一个布尔值表示括号是否正确匹配。
阅读全文