1. 程式人生 > >用順序棧解決括號是否匹配

用順序棧解決括號是否匹配

  我的程式編譯成功了但是好像只能操作兩個字元的字串,長的字串結果都是printf("對應的左右括號不是一類的。\n");

求大神幫忙解答一下微笑

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Size 100


typedef struct
{
char str[Size];
int top;
}SeqStack;


 void Initstack(SeqStack *s)
{
s->top =-1;
}
//
int IsEmpty(SeqStack *A)
{
return(A->top==-1? 1:0);
}




//進棧//
int Push(SeqStack *A,char m)
{

if(A->top==Size-1) return(0);
A->top++;
A->str[A->top]=m;
return(1);
}
//出棧
int Pop(SeqStack *A,char *m)
{
if(A->top==-1) return(1);
else
{
*m=A->str[A->top];
A->top--;
return(1);
}
}
//quzhi
int GetTop(SeqStack *A,char *m)
{
if(A->top==-1) return (0);
else
{
*m=A->str[A->top];
return (1);
}
}
//Match
int Match(char a,char b)
{
if(a=='('&&b==')') return(1);
else return(0);
    if(a=='['&&b==']') return(1);
else return(0);
    if(a=='{'&&b=='}') return(1);
else return(0);
}


void BracketMatch(char *str)
{
SeqStack S;
Initstack(&S);
int i;char ch;
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case '(':
case '[':
case '{':
Push(&S,str[i]);break;
case ')':
case ']':
case '}':
if(IsEmpty(&S))
{
printf("右括號多餘。\n");
return;
}
else
{
GetTop(&S,&ch);
if(Match(ch,str[i]))
Pop(&S,&ch);
else
{
printf("對應的左右括號不是一類的。\n");
   return;
}
}
}
}
if(IsEmpty(&S))
printf("\n括號匹配。");
else
printf("\n左括號多餘");
}


int main()
{
char str[100];
printf("請輸入字串 :\n");
scanf("%s",str);
printf("%s",str);
BracketMatch(str);
return 0;
system("pause");
}

相關推薦

順序解決括號是否匹配

  我的程式編譯成功了但是好像只能操作兩個字元的字串,長的字串結果都是printf("對應的左右括號不是一類的。\n"); 求大神幫忙解答一下 #include <stdio.h> #include <stdlib.h> #include <

在資料結構中用順序解決括號匹配問題

對於給定的一個表示式,其中一定會用到大量的左右括號,有小括號,中括號,甚至大括號。如何才能判斷其中的括號是否是一一對應的。所以可以用資料結構中的順序棧來解決這個問題 。在此我就以小括號的匹配為例來說明。在匹配檢查時,我們建立一個空的順序棧。我們從左到右依次的進行檢查,當遇到的是左括號'('時,就讓其進棧。當遇

c++利用順序解決括號匹配問題

already 括號匹配問題 是否 data ems else if alt 問題 http 題目: 7-1 括號匹配 (30 分) 給定一串字符,不超過100個字符,可能包括括號、數字、字母、標點符號、空格,編程檢查這

【面試題】解決括號匹配問題

思想:在表示式中,相同型別的括號(包括:()、[]、{})是成對出現的,並且當括號在表示式中巢狀時,不允許出現交叉現象。 檢驗括號匹配的方法,就是對給定的字串依次檢驗:若是左括號,入棧;若是又括號,出棧一個左括號判斷是否與之匹配;是其他字元,不檢驗。檢驗到字串

Java 解決括號匹配問題

在南陽理工ACM看到的一道題 問題描述:問題描述 : 輸入一個字串 裡面只含有 [ , ] , ( , ) 四種括號 ; 現要求判斷這個字串 是否滿足括號匹配  如    ([])()    是匹配的    ([)]是不匹配的 先貼程式碼    public void ch

順序實現括號匹配

2018-11-10-21:38:07 1 /********************************************************* 2 順序棧實現括號匹配。 3 main函式操作: 4 1.在這裡main函式內部主要以解決括

C語言實現順序括號匹配

//順序棧的使用舉例:括號的匹配 #include <stdio.h> #include <stdlib.h> #define OK      1 #define ERROR   0 #define TRUE    1 #define FALSE  

順序 & 順序括號匹配演算法

棧空時 S->top = -1 新增第一個元素過程: S->data[s->top++] = value; #include <stdio.h> #include <stdlib.h> #define MAXL

C++使用解決括號匹配問題

#include<iostream> #include<stack> #include<string> using namespace std; bool Jud

陣列模擬解決括號匹配

  這三道題其實是一個型別,難度依次遞增,所以博主直接講最後一道,前面兩道直接給程式碼。 表示式括號匹配(stack) 時間限制: 1000 ms 記憶體限制: 65536 KB 提交數: 133 通過數: 90 【題目描述】

解決括號匹配

package coding; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; class Stack{ char[

java版資料結構與演算法—(判斷括號是否匹配)

/** * 括號是否匹配 {} () [] */ class IsMatch { private char arr[]; private int maxSize; private int top; public IsMatch(int size){

資料結構順序實現R進位制轉換

#include<stdio.h> #define MAXSIZE 500 typedef struct{ int *base; int *top; int stacksize; }Sqstack; int Initstack(Sqstack &S)

順序建立雙結構

雙棧結構,即兩端都可以入棧,但無論從哪一端,仍遵從LIFO include define MAXSIZE 1024 typedef struct dStack{ elemtype data[MAXSIZE]; int to

C語言中利用檢測括號是否匹配

檢測括號是否匹配的演算法中,棧的特性是最符合括號特點的。棧的先進後出將括號的匹配正好完美實現。 思想: 從字串開頭向後逐個檢測,檢測到除括號外的元素就跳過。檢測到左括號時,就進行入棧操作,繼續向後檢測

通過實現括號匹配

我們通過順序表建立一個棧 如果我們需要實現一組括號的匹配,我們首先必須知道這個括號陣列當中所有的括號符號。 常見的括號符號也就 ‘[]’ ‘{}’ ‘()’,還有的一些奇奇怪怪的括號就不說了啊。 我們首先需要按思維邏輯思考,需要完成括號的左右搭配,即相同型別的括

順序實現十進制向二進制轉化

clu 進制 () fin maxsize malloc all truct size #include<stdio.h> #include<stdlib.h> #define maxsize 30 typedef int datatype; ty

Python 判斷括號匹配

#!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symbolString): s = Stack() balanced = T

資料結構:連結串列實現括號匹配

完成以下程式,並在右邊空白處,對錯誤進行修改,並記錄下程式執行結果: 1. 編寫演算法,判斷一表達式中的括號是否配對,包括大、中、小三類括號。 連結串列版本: #include <cstdio> #include <cmath> #inclu

Java實現判斷括號匹配問題

Stack的用例Parentheses,輸入一串括號用棧判斷其中的括號是否匹配,例如[()]{()}程式列印true,對於[](則列印false。 思路: 遇到左括號入棧,遇到右括號時先檢查棧是否為空,若空則返回false,若不空則彈出棧頂元素看與右括號是否