国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 15:22:15
字體:
來源:轉載
供稿:網友

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

首先回顧棧的基本知識:

1.定義棧的結構體并初始化一個新棧:

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;  }}

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

主要功能代碼如下:

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;  }}

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

完整實例代碼如下:

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define stacksize 100struct 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++算法設計的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涡阳县| 毕节市| 登封市| 鹤山市| 山丹县| 新源县| 勃利县| 齐齐哈尔市| 东乡县| 临猗县| 巫溪县| 凤翔县| 扬州市| 习水县| 卢湾区| 惠来县| 民县| 闽清县| 平邑县| 澄江县| 同心县| 乐亭县| 临漳县| 斗六市| 陇南市| 辉县市| 洛南县| 南昌县| 淮安市| 临沂市| 特克斯县| 安陆市| 雅安市| 盐源县| 丹阳市| 海宁市| 手机| 湖南省| 呈贡县| 邹平县| 邯郸市|