zoukankan      html  css  js  c++  java
  • C++,利用链式栈实现括号匹配,界面友好,操作方便,运行流畅

    #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.在下菜鸟,代码中难免有不妥之处,恳求大神批评指正。您的批评就是在下提高的起点,对于您的批评,在下将不胜感激! 
  • 相关阅读:
    c++ 的几种强制转换的讨论
    观察者模式
    epoll实现linux进程通信
    vim 实现 go to definition的功能
    svn 的使用
    makefile文件的技术
    [转]epoll技术
    [转]poll技术
    Linux重定向的理解
    避免僵死进程的方法
  • 原文地址:https://www.cnblogs.com/zpcdbky/p/4114476.html
Copyright © 2011-2022 走看看