C语言 输入一串字符,判断其中的括号是否配对(循环)
时间: 2024-12-17 10:34:52 浏览: 16
在C语言中,判断一串括号是否配对通常采用栈数据结构。以下是通过循环实现的基本步骤:
1. 定义两个指针,一个指向输入字符串的开始(str),另一个指向下标i(初始值为0),同时创建一个空栈。
2. 使用while循环遍历输入字符串,直到遇到以下情况之一:
- 遇到左括号(如'('、'['或'{'),将其压入栈中。
- 遇到右括号(如')'、']'或'}'):
- 如果栈为空,说明当前右括号没有匹配的左括号,返回false。
- 否则,弹出栈顶元素,检查它是否与当前右括号匹配。如果不匹配,返回false。
- 匹配规则通常是基于括号的优先级顺序,例如先处理小括号再处理大括号,方括号放在它们之间。
3. 当遍历完成后,如果栈为空,则所有括号都已成功匹配,返回true;否则返回false,表示有未匹配的括号。
下面是一个简单的C函数示例实现这个功能:
```c
#include <stdbool.h>
#include <stdio.h>
bool isParenthesesMatched(char str[]) {
stack char brackets[100]; // 假设最大嵌套深度为100
int i = 0;
while (str[i] != '\0') { // 遍历字符串
if (str[i] == '(' || str[i] == '[' || str[i] == '{') { // 遇到左括号
push(brackets, str[i]);
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') { // 遇到右括号
if (brackets.top() == '\0') {
return false; // 没有匹配的左括号
}
if (!match(brackets.top(), str[i])) {
return false;
}
pop(brackets);
}
i++;
}
return brackets.top() == '\0'; // 判断栈是否为空
}
// 匹配函数用于检查栈顶元素是否与当前右括号匹配
bool match(char top, char current) {
if (top == '(' && current == ')') return true;
if (top == '[' && current == ']') return true;
if (top == '{' && current == '}') return true;
return false;
}
int main() {
char str[] = "({[()]})";
if (isParenthesesMatched(str)) {
printf("括号配对。\n");
} else {
printf("括号不配对。\n");
}
return 0;
}
```
阅读全文