鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[技术交流] 括号匹配(栈的应用)

  [复制链接]
发表于 2013-9-4 23:03:56 | 显示全部楼层
不明白啊,怎样才知道他们匹配呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-13 14:10:29 | 显示全部楼层
学习一下看看代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-21 18:00:04 | 显示全部楼层
看一看啊。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-22 09:33:16 | 显示全部楼层
学习一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-26 20:21:55 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-30 16:00:23 | 显示全部楼层
学习下小甲鱼老师的精神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-3 10:58:31 | 显示全部楼层
希望有帮助,5鱼币还是很贵的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-4 12:14:07 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 23:36:25 | 显示全部楼层
做过了对答案来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-19 14:42:13 | 显示全部楼层
正在跟着视频学习!!! 赞!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-8 10:41:27 | 显示全部楼层
  1. #ifndef STACK_H_
  2. #define STACK_H_
  3. #include <new>
  4. #include <initializer_list>

  5. template <typename T>
  6. class Stack
  7. {
  8.         private:
  9.                 T * base;
  10.                 T * top;
  11.                 unsigned int StackSize; //表示栈内剩余容量
  12.         public:
  13.                 Stack(const unsigned int size, const T * begin, const T * end);
  14.                 Stack(const unsigned int size, const T arr[], const int n);
  15.                 Stack(const unsigned int size, const std::initializer_list<T> & l);
  16.                 Stack(const unsigned int size = 100);
  17.                 ~Stack() {delete [] base;}
  18.                 bool Push(const T & item);
  19.                 bool Pop(T & e);
  20.                 bool Clear();
  21.                 bool Is_Empty()const {return base == top;}
  22.                 unsigned int Remaining()const {return StackSize;}
  23.                 unsigned int StackLen()const {return top - base;}
  24.                 unsigned int Size()const {return StackSize + (top - base);}
  25. };

  26. template <typename T>
  27. Stack<T>::Stack(const unsigned int size, const T * begin, const T * end) : StackSize(size)
  28. {
  29.         if (StackSize < end - begin)
  30.                 StackSize = end - begin;
  31.         try {
  32.         base = top = new T[StackSize];
  33.         }
  34.         catch (std::bad_alloc & ba) {
  35.                 base = top = nullptr;
  36.                 StackSize = 0;
  37.                 throw;
  38.         }
  39.         for (T * p = begin; p != end; p++)
  40.                 Push(*p);
  41. }

  42. template <typename T>
  43. Stack<T>::Stack(const unsigned int size, const T arr[], const int n) : StackSize(size)
  44. {
  45.         if (StackSize < n)
  46.                 StackSize = n + 1;
  47.         try {
  48.                 base = top = new T[StackSize];
  49.         }
  50.         catch (std::bad_alloc & ba) {
  51.                 base = top = nullptr;
  52.                 StackSize = 0;
  53.                 throw;
  54.         }
  55.         for (int i = 0; i < n; i++)
  56.                 Push(arr[i]);
  57. }

  58. template <typename T>
  59. Stack<T>::Stack(const unsigned int size, const std::initializer_list<T> & l) : StackSize(size)
  60. {
  61.         int i = 0;
  62.         try{
  63.                 base = top = new T[StackSize];
  64.         }
  65.         catch (std::bad_alloc & ba) {
  66.                 base = top = nullptr;
  67.                 StackSize = 0;
  68.                 throw;
  69.         }
  70.         for (auto p = l.begin(); p != l.end(); p++, i++)
  71.                 Push(*p);
  72. }

  73. template <typename T>
  74. Stack<T>::Stack(const unsigned int size) : StackSize(size)
  75. {
  76.         try {
  77.         base = top = new T[StackSize];
  78.         }
  79.         catch (std::bad_alloc & ba) {
  80.                 base = top = nullptr;
  81.                 StackSize = 0;
  82.                 throw;
  83.         }
  84. }

  85. template <typename T>
  86. bool Stack<T>::Push(const T & item)
  87. {
  88.         if (StackSize == 0)
  89.         {
  90.                 T * temp = base;
  91.                 unsigned int size = top - base;
  92.                 StackSize = size + 10;
  93.                 try {
  94.                         base = top = new T[StackSize];
  95.                 }
  96.                 catch (std::bad_alloc & ba) {
  97.                         StackSize = 0;
  98.                         base = top = nullptr;
  99.                         delete [] temp;
  100.                         return false;
  101.                 }
  102.                 for (int i = 0; i < size; i++)
  103.                         Push(temp[i]);
  104.                 Push(item);
  105.                 delete [] temp;
  106.                 return true;
  107.         }
  108.         *(top++) = item;
  109.         StackSize--;
  110.         return true;
  111. }

  112. template <typename T>
  113. bool Stack<T>::Pop(T & e)
  114. {
  115.         if (top && !Is_Empty())
  116.         {
  117.         e = *(--top);
  118.         StackSize++;
  119.         return true;
  120.         }
  121.         return false;
  122. }

  123. template <typename T>
  124. bool Stack<T>::Clear()
  125. {
  126.         if(top)
  127.         {
  128.         StackSize += top - base;
  129.         top = base;
  130.         return true;
  131.         }       
  132.         return false;
  133. }

  134. #endif
复制代码
  1. #include <iostream>
  2. #include "Stack.h"

  3. bool is_match (const char c1, const char c2);

  4. int main()
  5. {
  6.         using std::cout;
  7.         using std::endl;
  8.         using std::cin;
  9.        
  10.         cout << "请输入一组括号,程序将判断是否匹配: ";
  11.        
  12.         char ch;
  13.         Stack<char>  par(5);
  14.        
  15.         while (cin.get(ch) && ch != '\n')
  16.         {
  17.                 if (ch == '(' || ch == '<'
  18.                  || ch == '{')
  19.                          par.Push(ch);
  20.                 else if (ch == ')' || ch == '>'
  21.                  || ch == '}')
  22.                  {
  23.                          char temp = ch;
  24.                          par.Pop(ch);
  25.                          if (!is_match(ch, temp))
  26.                          {
  27.                                  cout << "您输入的括号不完全匹配.\n";
  28.                                  return 0;
  29.                          }
  30.                  }
  31.         }
  32.        
  33.         cout << "您输入的括号完全匹配!\n";
  34.        
  35.         return 0;
  36. }

  37. bool is_match(const char c1, const char c2)
  38. {
  39.         switch (c1)
  40.         {
  41.                 case '(': return c2 == ')';
  42.                 break;
  43.                 case '<': return c2 == '>';
  44.                 break;
  45.                 case '{': return c2 == '}';
  46.                 break;
  47.         }
  48.        
  49.         return false;       
  50. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-16 17:35:43 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 11:41:49 | 显示全部楼层
sdfsdfsdfsdfasdfs
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-28 20:49:42 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-28 21:45:59 | 显示全部楼层
我怎么感觉巨亏呢,这是个什么东西呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-23 18:35:52 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-27 22:15:14 | 显示全部楼层
我来虚席的!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-29 00:47:38 | 显示全部楼层
膜拜小甲鱼{:7_181:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-30 13:34:55 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-31 16:16:35 | 显示全部楼层
谢谢了这个来学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 02:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表