【C++】字符串中的括号是否匹配

题目:
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

判断字符串中的括号是不是匹配的。
直觉告诉我应该要用到栈~
思路:遍历字符,若碰到左括号就将“左括号对应的右括号”入栈;若碰到右括号,先对栈判空,若空返回false,然后判断该值与栈的top是否相等,若不相等返回false。循环结束之后若栈空返回true,否则返回false。
代码如下:

bool isValid(string s) {
   map<char,char> map_s={{'(',')'},{'[',']'},{'{','}'}};
    stack<char> temp;

    for(int i=0;i<s.length();++i){
        if(map_s.find(s[i])!=map_s.end())    //若是左括号
            temp.push(map_s[s[i]]);         //将s[i]在map中的值,放到栈中
        else{
            if(temp.empty())
                return false;
            if(s[i]==temp.top())     //若相等
                temp.pop();
            else
                return false;
        }
    }
    if(temp.empty())
        return true;
    else
        return false;
    }

小得,关于C++中栈stack的使用:stack temp;
栈常用的函数:1,temp.empty():判空,若空返回true。2,temp.top():输出栈顶元素;3,temp.pop():出栈;4,temp.push():进栈。
map:map_s.find(s[i])!=map_s.end() 判断map中是否含有有个元素。

可以使用栈来判断字符串左右括号是否配对。 具体思路如下: 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*类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯拿铁go

你的打赏是我更新最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值