程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++頂用棧來斷定括號字符串婚配成績的完成辦法

C++頂用棧來斷定括號字符串婚配成績的完成辦法

編輯:關於C++

C++頂用棧來斷定括號字符串婚配成績的完成辦法。本站提示廣大學習愛好者:(C++頂用棧來斷定括號字符串婚配成績的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C++頂用棧來斷定括號字符串婚配成績的完成辦法正文


本文實例重要完成:輸出一個括號字符串,順次磨練,若為左括號則入棧,若為右括號則出棧一個字符斷定能否與之絕對應,在最初還需斷定棧能否為空,假如不為空則不婚配。

起首回想棧的根本常識:

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 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++算法設計的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved