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

括号匹配的检验

时间:2014-10-15 14:31:31      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   文件   sp   

描述:

假设一个表达式或一段程序中含有三种括号:圆括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”。试写一个程序判别给定的表达式或程序中所含括号是否正确配对出现。

输入说明:

多组输入数据,第1行为1个正整数n,表明有n组测试数据;其余n行为n组测试数据,每行为一个含有括号的表达式或一段程序。

输出说明:

对于每一组测试数据,输出一个right或wrong,表明正确匹配与否。

 

输入样例:

3

a=b+(c-d)*(e-f));

while (m<(a[8]+t) {m=m+1;  t=t-1;}

b=a*(4+c)-c[i];

输出样例:

wrong

wrong

right

 

括号匹配是栈(Stack)的一个经典应用

下面是我用调用C++函数的方法完成本题的代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<stack>     //包含栈的头文件
 5 using namespace std;
 6 int main()
 7 {
 8     int n;
 9     cin>>n;
10     getchar();      //cin不会丢弃输入流中的换行符,getchar()函数用来接收n后面的换行符
11     while(--n)
12     {
13         stack<char> s;
14         string str;
15         getline(cin,str);   //读取一行存放到str中,读取时会自动丢弃换行符
16         for(int i=0;i<str.size();i++)
17         {
18             char st=str[i];
19             if(st==(||st==)||st==[||st==]||st=={||st==})
20             {
21                 if(st==(||st==[||st=={)
22                     s.push(st);
23                 else if(st==))
24                     if(s.top()==() s.pop();  else break;
25                 else if(st==])
26                     if(s.top()==[) s.pop();  else break;
27                 else
28                     if(s.top()=={) s.pop();  else break;
29             }
30         }
31         s.empty() ? cout<<"right"<<endl : cout<<"wrong"<<endl;
32     }
33     return 0;
34 }

******

括号匹配的检验

标签:style   blog   color   io   os   ar   for   文件   sp   

原文地址:http://www.cnblogs.com/sage-blog/p/4026023.html

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