编C语言程序,判断给定以字符‘@’结束的字符序列中‘(’与‘)’、‘[’与‘]’、‘{’与‘}’的个数是否相等。
时间: 2024-09-26 11:06:19 浏览: 43
当你编写C语言程序来判断字符序列中圆括号('(', ')'), 方括号('[' , ']'), 和花括号('{', '}')的匹配对数时,可以采用栈数据结构。以下是步骤:
1. 首先,创建一个空的栈(通常是整型数组或链表)来存储遍历过程中遇到的左括号。
2. 从输入序列开始,逐个字符读取。如果当前字符是一个左括号(如'('、'{'或'['),将其压入栈中。
3. 如果遇到一个右括号(如')'、'}'或']'),检查栈顶元素是否是对应的左括号。如果是,则弹出栈顶元素;如果不是,说明匹配失败,返回错误。
4. 当遍历到字符序列的末尾,并且栈为空时,表示所有的左括号都有了正确的对应右括号,此时括号配对有效。
5. 如果遍历结束后栈非空,那么存在未找到匹配的左括号,也表明配对失败。
下面是一个简单的C语言函数示例,它实现了上述逻辑:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stack>
bool check_brackets(char* str) {
stack<char> brackets;
for (char c : str) {
if (c == '(' || c == '{' || c == '[') {
brackets.push(c);
} else if (c == ')' && !brackets.empty() && brackets.top() == '(') {
brackets.pop();
} else if (c == '}' && !brackets.empty() && brackets.top() == '{') {
brackets.pop();
} else if (c == ']' && !brackets.empty() && brackets.top() == '[') {
brackets.pop();
} else {
return false; // 不匹配的括号
}
}
return brackets.empty(); // 判断剩余栈是否为空
}
int main() {
char str[] = "({[]})";
if (check_brackets(str)) {
printf("括号配对正确\n");
} else {
printf("括号配对错误\n");
}
return 0;
}
```
阅读全文