您的位置:首页 > 其它

利用栈解决符号匹配问题

2013-06-09 14:37 176 查看
看到《数据结构》书中,有提到这个栈应用,就自己写个C++实现下~~熟悉下
#include <iostream>
using namespace std;
#include <stack>
#include <string.h>
/*
用栈实现,判断(),[]在等式中是否配对正确
几种特殊情况要考虑到,
1.当没有与之配对的栈,则是匹配错误例如:()[]]
2.当退出时候,需要判断栈是否为空,是否都有判断过;例如[()
author : cheng 2013.6.9
*/
bool is_match(char *s)
{
int i;
char temp;
stack<char>m_stack;
for(i =0; s[i]!=0;i++)
{
if(s[i]=='('|| s[i]== '[')
m_stack.push(s[i]);
else if(s[i]==')' || s[i] == ']')
{
if(m_stack.size()==0) //当没有与之配对的栈,则是匹配错误()[]]
return false;
temp = m_stack.top();
switch(temp)
{
case '(':
{
if(s[i]==')')
{
m_stack.pop();
break;
}
else
return false;
}
case '[':
{
if(s[i] ==']')
{
m_stack.pop();
break;
}
else
return false;
}
}

}
else //other char to skip it
continue;
}
if(m_stack.size()==0) //check if all symbol match already 例如:[()
return true;
else
return false;
}
int main()
{
char src[1000];
while(scanf("%s",src)!=EOF)
{
if(is_match(src) == 1)
cout<<"match OK!"<<endl;
else
cout<<"Mis match,Please check it!"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: