最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中用棧來判斷括號字符串匹配問題的實現(xiàn)方法

 更新時間:2014年08月27日 09:20:51   投稿:shichen2014  
這篇文章主要介紹了C++中用棧來判斷括號字符串匹配問題的實現(xiàn)方法,是一個比較實用的算法技巧,包含了關(guān)于棧的基本操作,需要的朋友可以參考下

本文實例主要實現(xiàn):輸入一個括號字符串,依次檢驗,若為左括號則入棧,若為右括號則出棧一個字符判斷是否與之相對應(yīng),在最后還需判斷棧是否為空,如果不為空則不匹配。

首先回顧棧的基本知識:

1.定義棧的結(jié)構(gòu)體并初始化一個新棧:

struct stack
{
  char strstack[stacksize];
  int top;
};

void InitStack(stack &s)
{
  s.top=-1;
}

2.出棧和入棧操作:

char Push(stack &s,char a)
{
  if(s.top==stacksize-1)
  {
    return 0;
  }
  s.top++;
  s.strstack[s.top]=a;
  return a;
}

char Pop(stack &s)
{
  if(s.top==-1)
  {
    return 0;
  }
  char a=s.strstack[s.top];
  s.top--;
  return a;
}

3.判斷棧是否為空:

int Empty(stack &s,int re)
{
  if(s.top==-1)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

以上是棧的基本操作,定義一個棧和初始化一個新棧,出棧和入棧操作,以及判斷棧是否為空的情況。接下來將寫一個函數(shù),檢查字符串的每個字符,左括號則進行入棧操作,右括號則進行出棧操作看其是否匹配,最后判斷是否為空以判定是否匹配。

主要功能代碼如下:

int Check(char *str)
{
  stack s;
  InitStack(s);
  int strn=strlen(str);
  for(int i=0;i<strn;i++)
  {
    char a=str[i];
    switch (a)
    {
    case '(':
    case '[':
    case '{':
      Push(s,a);
      break;
    case ')':
      if(Pop(s)!='(')
      {
        return 0;
      }
      break;
    case ']':
      if(Pop(s)!='[')
      {
        return 0;
      }
      break;
    case '}':
      if(Pop(s)!='{')
      {
        return 0;
      }
      break;
    }
  }
  int re=0;
  re=Empty(s,re);
  if(re==1)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

自此,括號字符串匹配的判斷問題已經(jīng)解決,下面貼出完整的經(jīng)過編譯運行過的代碼。

完整實例代碼如下:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define stacksize 100
struct stack
{
  char strstack[stacksize];
  int top;
};
void InitStack(stack &s)
{
  s.top=-1;
}
char Push(stack &s,char a)
{
  if(s.top==stacksize-1)
  {
    return 0;
  }
  s.top++;
  s.strstack[s.top]=a;
  return a;
}
char Pop(stack &s)
{
  if(s.top==-1)
  {
    return 0;
  }
  char a=s.strstack[s.top];
  s.top--;
  return a;
}
int Empty(stack &s,int re)
{
  if(s.top==-1)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
int Check(char *str)
{
  stack s;
  InitStack(s);
  int strn=strlen(str);
  for(int i=0;i<strn;i++)
  {
    char a=str[i];
    switch (a)
    {
    case '(':
    case '[':
    case '{':
      Push(s,a);
      break;
    case ')':
      if(Pop(s)!='(')
      {
        return 0;
      }
      break;
    case ']':
      if(Pop(s)!='[')
      {
        return 0;
      }
      break;
    case '}':
      if(Pop(s)!='{')
      {
        return 0;
      }
      break;
    }
  }
  int re=0;
  re=Empty(s,re);
  if(re==1)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
void main()
{
  char str[100];
  cout<<"請輸入一個長度小于100的字符串:"<<endl;
  cin>>str;
  int re=Check(str);
  if(re==1)
  {
    cout<<"你輸入的字符串括號完全匹配!"<<endl;
  }
  else if(re==0)
  {
    cout<<"你輸入的字符串括號不匹配!"<<endl;
  }
}

希望本文所述實例對大家C++算法設(shè)計的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C語言實現(xiàn)簡單的三子棋游戲

    C語言實現(xiàn)簡單的三子棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C++實現(xiàn)與Lua相互調(diào)用的示例詳解

    C++實現(xiàn)與Lua相互調(diào)用的示例詳解

    這篇文章主要為大家詳細介紹了C++實現(xiàn)與Lua相互調(diào)用的方法,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C++ 實現(xiàn)對象池的具體方法

    C++ 實現(xiàn)對象池的具體方法

    本文主要介紹了C++ 實現(xiàn)對象池的具體方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換

    C++實現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了C++實現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換的方法,文中的示例代碼講解詳細,對我們學(xué)習(xí)C++有一定的幫助,需要的可以參考一下
    2023-01-01
  • Qt?事件處理機制的深入理解

    Qt?事件處理機制的深入理解

    本文主要介紹了Qt?事件處理機制的深入理解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • c++之類型別名的實現(xiàn)

    c++之類型別名的實現(xiàn)

    本文主要介紹了c++之類型別名的實現(xiàn),包括C++98版本使用typedef關(guān)鍵字和C++11版本推薦使用using關(guān)鍵字來創(chuàng)建類型別名,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • C語言實現(xiàn)素因子分解

    C語言實現(xiàn)素因子分解

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)素因子分解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Vs2019+Qt+Opencv環(huán)境配置心得(圖文)

    Vs2019+Qt+Opencv環(huán)境配置心得(圖文)

    這篇文章主要介紹了Vs2019+Qt+Opencv環(huán)境配置心得(圖文),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 利用Matlab編寫簡易版連連看小游戲

    利用Matlab編寫簡易版連連看小游戲

    連連看作為經(jīng)典的小游戲,一定是很多人的回憶吧。本文將用Matlab實現(xiàn)這一經(jīng)典的游戲,文中示例代碼具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實現(xiàn)掃雷游戲(控制臺版)

    C++實現(xiàn)掃雷游戲(控制臺版)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)掃雷游戲,控制臺版的掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

方城县| 漠河县| 禄丰县| 屯昌县| 成安县| 永宁县| 敖汉旗| 建昌县| 松滋市| 冷水江市| 黔西| 会同县| 延津县| 宁河县| 江陵县| 六枝特区| 华亭县| 达孜县| 旬阳县| 水富县| 芜湖县| 太谷县| 兴隆县| 襄城县| 邳州市| 横峰县| 辰溪县| 健康| 乌审旗| 陇川县| 会东县| 晋宁县| 威海市| 万安县| 诸城市| 平定县| 望都县| 延长县| 璧山县| 缙云县| 棋牌|