码迷,mamicode.com
首页 > 其他好文 > 详细

合法括号【栈】

时间:2018-04-04 23:34:14      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:namespace   body   字符串   []   发布   tac   als   判断   span   

 

                                                            合法括号

                                                    发布时间: 2018年4月2日 20:46   时间限制: 1000ms   内存限制: 128M

给定字符串,只包含以下括号:‘(‘, ‘)‘, ‘{‘, ‘}‘, ‘[‘ and ‘]‘ , 判断输入是否合法。括号匹配必按照要求:"()" and "()[]{}", 而不是 "(]" and "([)]"

 

输入包含多组测试数据,每组测试数据占一行,不超过80个字符的字符串。

对于每组测试数据,如果合法,输出true,否则false,每组输出占一行。

 

()()
((((({{{]]]]]]
true
false



#include <cstdio>
#include <cstring>
#include <stack>
#include <iostream>
#include <algorithm>
using namespace std;

stack<char>s;

int main()
{
    char str[100];
    while (scanf("%s", &str)!=EOF)
    {
        while (!s.empty())s.pop();
        int flag = 1;
        int len = strlen(str);
        for (int i = 0; i < len; i++)                //判断输入的字符串中是否有不符合标准的字符
        {
            if (str[i] == ( || str[i] == { || str[i] == [ || str[i] == ) || str[i] == } || str[i] == ])
                flag = 1;
            else
            {
                flag = 0;
                break;
            }
        }
        if (!flag)
        {
            printf("false\n");
            continue;
        }
        for (int i = 0; i < len; i++)
        {
            if (str[i] == ( || str[i] == { || str[i] == [)
            {
                s.push(str[i]);               //左括号就入栈
            }
            else if (str[i] == ) || str[i] == } || str[i] == ])            //如果是右括号,就看栈的顶端是否是和它配对的左括号
            {
                if (!s.empty())
                {
                    if (str[i] == ))str[i] = (;
                    else if (str[i] == })str[i] = {;
                    else if (str[i] == ])str[i] = [;
                    if (s.top() == str[i])
                    {
                        s.pop();                    //如果匹配的话,就把左括号pop掉
                    }
                }
                else
                {
                    flag = 0;
                    break;
                }
            }
        }
        if (s.size())flag = 0;
        if (!flag)printf("false\n");
        else
            printf("true\n");
    }
    return 0;
}



2018-04-04

合法括号【栈】

标签:namespace   body   字符串   []   发布   tac   als   判断   span   

原文地址:https://www.cnblogs.com/00isok/p/8719076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!