用C加加编写以下代码:修改参考程序中的代码,在main函数中实现从键盘上输入一算术表达式检验该算术表达式中的小括号是否配对。匹配规则如下: (1)配对的算术表达式中左右括号的数目应相等。 (2)正确的算术表达式中每一个左括号都一定有一个右括号与之匹配。
时间: 2024-12-01 14:29:50 浏览: 30
在C语言中,我们可以使用栈数据结构来检查括号的配对。这里是一个简单的示例,我们将创建一个`main`函数,通过用户输入的字符串来检测括号的配对:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stack>
// 检查括号类型的函数,true表示匹配成功,false表示不匹配
bool is_matching(char left, char right) {
if (left == '(' && right == ')') return true;
else if (left == '{' && right == '}') return true;
else if (left == '[' && right == ']') return true;
else return false;
}
// 检查整个括号字符串是否匹配的函数
bool check_parentheses(const char* expression) {
stack<char> parentheses;
for (int i = 0; expression[i] != '\0'; ++i) {
if (expression[i] == '(' || expression[i] == '{' || expression[i] == '[') {
parentheses.push(expression[i]);
} else if (expression[i] == ')' || expression[i] == '}' || expression[i] == ']') {
if (parentheses.empty()) {
return false; // 如果当前字符没有对应的左括号,立即返回错误
}
if (!is_matching(parentheses.top(), expression[i])) {
return false; // 匹配失败,直接返回
}
parentheses.pop();
}
}
// 检查栈是否为空,如果为空说明所有括号都有匹配,反之则未配对
return parentheses.empty();
}
int main() {
char input[100];
printf("请输入一个算术表达式(包含小括号):");
fgets(input, sizeof(input), stdin);
// 移除末尾换行符
input[strcspn(input, "\n")] = '\0';
bool result = check_parentheses(input);
if (result) {
printf("括号匹配成功!\n");
} else {
printf("括号不匹配!\n");
}
return 0;
}
```
在这个程序中,我们首先定义了两个辅助函数:`is_matching`用于判断左右括号是否匹配,`check_parentheses`负责遍历整个输入字符串并检查括号的配对。
在`main`函数中,用户从键盘输入一个算术表达式,然后通过`check_parentheses`函数检查括号是否配对。最后,根据检查结果输出相应的消息。
阅读全文