用c语言设计一个程序对任意输入的语句或数学表达式,判断其括号是否匹配。若匹配,则返回1,否则返回0。调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。 拓展题目:实现表达式求值;实现舞伴问题。
时间: 2024-12-05 12:16:14 浏览: 28
为了用 C 语言设计一个检查括号匹配的程序,我们可以采用栈数据结构。对于给定的字符串,遍历每个字符,如果遇到左括号 '(', '[', 或 '{',就将其压入栈中。当遇到右括号 ')'、']' 或 '}' 时,检查栈顶元素是否与其配对。如果匹配,弹出栈顶元素;如果不匹配,说明括号不匹配,直接返回 0。遍历结束后,栈为空表示所有括号都已配对,返回 1。
下面是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isParenthesesMatch(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] == ')' && parentheses.top() != '(' ||
expression[i] == ']' && parentheses.top() != '[' ||
expression[i] == '}' && parentheses.top() != '{') {
return false;
} else {
parentheses.pop();
}
}
// 如果遍历完整个字符串后栈为空,括号匹配
return parentheses.empty();
}
int main() {
const char* test_cases[] = {"()", "({})", "([)]", "({[})"};
int num_tests = sizeof(test_cases) / sizeof(*test_cases);
for (int i = 0; i < num_tests; ++i) {
bool result = isParenthesesMatch(test_cases[i]);
printf("Test case %d: %s\nResult: %d\n", i + 1, test_cases[i], result);
if (result) {
printf("Expected output: 1\n");
} else {
printf("Expected output: 0\n");
}
}
return 0;
}
```
在这个例子中,我们测试了几个常见的括号组合。例如,"()" 和 "({[})" 应该返回 1,因为它们的括号都配对了;而 "([)" 返回 0,因为最后一个右括号没有对应的左括号。
阅读全文