TCreopargh
书山有路搞为径,学海无涯机作舟。
乱搭的站

(C++)括号匹配

问题描述
keyboard_arrow_down

请写一个程序,判断给定表达式中的括号是否匹配。表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。

输入说明
keyboard_arrow_down

有多个表达式,每个表达式占一行。当输入的表达式为空字符串(长度为0)时表示输入结束。

输出说明
keyboard_arrow_down

对每个表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。

输入样例
keyboard_arrow_down

[(d+f)*{}2] 
[(2+3)) 
()} 
[4(6]7)9 

输出样例
keyboard_arrow_down

yes 
no 
no 
no

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    while(true)
    {
        string s,stack;
        getline(cin,s);
        if(s=="")
            break;
        for(int i=0; i<(int)s.size(); i++)
        {
            if(s.at(i)=='{'||s.at(i)=='('||s.at(i)=='[')
            {
                stack+=s.at(i);
            }
            else if(s.at(i)=='}'||s.at(i)==')'||s.at(i)==']')
            {
                stack+=s.at(i);
                if(stack.size()>=2&&((stack.at(stack.size()-2)=='('&&stack.at(stack.size()-1)==')')||(stack.at(stack.size()-2)=='['&&stack.at(stack.size()-1)==']')||(stack.at(stack.size()-2)=='{'&&stack.at(stack.size()-1)=='}')))
                {
                    stack.erase(stack.end()-2,stack.end());
                }
            }
        }
        if(stack=="")
            cout<<"yes"<<endl;
        else
            cout<<"no"<<endl;
    }
    return 0;
}
赞赏

发表回复

textsms
account_circle
email

乱搭的站

(C++)括号匹配
问题描述 keyboard_arrow_down 请写一个程序,判断给定表达式中的括号是否匹配。表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照…
扫描二维码继续阅读
2018-11-26