您的位置:首页 > 编程语言 > C语言/C++

C++,利用链式栈实现括号匹配,界面友好,操作方便,运行流畅

2014-11-21 23:40 519 查看
#include<iostream>
#include<string>
using namespace std;

struct Node
{
char ch;
Node* next;
Node(char c, Node* p){ ch = c; next = p; }
};

void main()
{
string str;
bool flag = true;
while (flag)
{
cout << "请输入算术表达式:" << endl;
getline(cin, str);
int len = str.length();
Node* top = NULL;
int i;
for (i = 0; i < len; i++)
{
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
{
top = new Node(str[i], top);
}
if (str[i] == ')' || str[i] == ']' || str[i] == '}')
{
if (top == NULL){ cout << "1.括号不匹配!" << endl; break; }
else
{
Node* pt = top;
top = top->next;
pt->next = NULL;
char item = pt->ch;
delete pt;
if ((item == '('&&str[i] != ')') || (item == '['&&str[i] != ']') || (item == '{'&&str[i] != '}'))
{
cout << "2.括号不匹配!" << endl; break;
}
}
}
}
if (i == len)
{
if (top){ cout << "3.括号不匹配!" << endl; }
else cout << "括号完全匹配!" << endl;
}
if (top)
{
Node* ptr;
while (top)
{
ptr = top->next;
delete top;
top = ptr;
}
}
cout << "是否继续?继续请按1,退出请按0:" << endl;
int choice;
cin >> choice;
getchar();
if (choice == 0)flag = false;
}
}

代码已经过测试,在VS2013上成功运行!

发此文有两大目的:

1.和大家交流经验,供需要的人参考。

2.在下菜鸟,代码中难免有不妥之处,恳求大神批评指正。您的批评就是在下提高的起点,对于您的批评,在下将不胜感激!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐