标签: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