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

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

2014-11-01 16:28 405 查看

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