C++如何判断字符串中左右括号是否配对
时间: 2023-05-27 14:02:31 浏览: 111
可以使用栈来判断字符串中左右括号是否配对。
具体思路如下:
1. 创建一个空栈。
2. 从字符串的左边开始遍历每个字符,如果是左括号,则将其压入栈中。
3. 如果是右括号,则检查栈是否为空,若为空,则说明右括号与左括号不配对,返回false;若不为空,则将栈顶的左括号弹出,与当前右括号进行匹配。如果匹配成功,则继续遍历字符串,如果匹配失败,则返回false。
4. 如果遍历完字符串后,栈为空,则说明所有左括号都有与之匹配的右括号,返回true;否则返回false。
下面是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdbool.h> // 使用bool类型
bool checkParentheses(char* str) {
char stack[100]; // 假设字符串不超过100个字符,栈大小为100
int top = -1; // 栈顶指针初始化为-1,表示栈为空
int i = 0; // 遍历字符串的下标
while (str[i] != '\0') { // 遍历字符串
if (str[i] == '(') { // 左括号入栈
stack[++top] = '(';
} else if (str[i] == ')') { // 右括号匹配
if (top < 0 || stack[top] != '(') { // 栈为空或栈顶不是左括号,匹配失败
return false;
} else { // 匹配成功,弹出栈顶的左括号
top--;
}
}
i++;
}
if (top < 0) { // 如果遍历完字符串后,栈为空,则说明所有左括号都有与之匹配的右括号
return true;
} else {
return false;
}
}
int main() {
char str[100]; // 定义一个字符数组,用于存储输入的字符串
gets(str); // 读入字符串
if (checkParentheses(str)) {
printf("The parentheses are matched!");
} else {
printf("The parentheses are not matched!");
}
return 0;
}
```
注意:上述代码中,使用了gets()函数读入字符串,但是gets()函数存在安全漏洞,建议使用更加安全的fgets()函数代替。同时,由于str是一个指向字符数组的指针,在函数checkParentheses中对str进行修改,因此需要将其声明为char*类型。
阅读全文