關於演算法 括號配對問題C 原始碼

2022-12-15 22:05:12 字數 4436 閱讀 4646

1樓:物理公司的

#include

#include

#include

using namespace std;

int main()

while(!number.empty())for(int i=0; i

括號配對問題,有一行**看不懂,這是c++版的,希望一個c語言版的,跪求。**等。。。。

2樓:

那句看不懂?

授人以魚不如授人以漁!

#include "stdafx.h" //這句沒用,不過如果你是在vc中用嚮導生成的**那就留著吧。

#include //改:標準化後的c++使用iostream、c語言則使用stdio.h,這句可以刪了

#include

#include //好像你也沒用到什麼標準庫函式

using namespace std; //c語言沒有名稱空間的概念,這句也可以刪了。

void f(char *pstr) //函式的形參接受一個字串實參,指標pstr將用於遍歷該字串

//如果遇到了'else //當遇到了')'右括號時,棧指標向棧底(瓶底)移動一個單位,並判斷該處所暫存的字元是不是對應的'('左括號,如果不是就表示兩個括號不匹配,置狀態標記為0(flag==0將導致for迴圈體終止)。下同。

case']':if(*--pstack != '[')else

case'}':if(*--pstack != 'else

default:; //本句可以有也可以刪除,但是建議保留。}}

if(flag == 0 || pstack != stack) //如果括號不匹配或者棧指標沒有指向棧頂(原因可能是左右括號數量不一致)則輸出不相匹配的括號,並提示出錯。

else

}int main()

編寫一個c++程式,解決括號匹配問題,即匹配一個字串中的左右括號.

3樓:匿名使用者

#include

using namespace std;

#define stack_int_size 100#define stackincrement 10#define ok 1

#define error 0

typedef char selemtype;

typedef int status;

typedef struct

sqstack;

<<"輸入結束,下面將判斷括號是否匹配!"<

一道關於「括號配對問題」的c++程式設計題 沒看懂答案(涉及到容器)

4樓:匿名使用者

這樣的匹配是用了棧的思想。

if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2))

查一下ascii碼的表,你會發現

(和)的碼值差1

[和],碼值差2

()與{}的值差得很遠

vec.back()-1 == *(vec.end()-2是用vec中的最後一個元素值減1和vec中倒數第二個元素比較,如果相等,說明這是(),配對成功,讓配對元素出棧,繼續檢查下面的字元

同理,vec.back()-2 == *(vec.end()-2)是用vec中的最後一個元素值減2和vec中倒數第二個元素比較,如果相等,說明這是或{},配對成功,讓配對元素出棧,繼續檢查下面的字元

題 目 一:括號配對檢查程式 對輸入的一段c或者c++**(只要求其中一種),檢查各種括號是否配對,以及配對 10

5樓:匿名使用者

設計原理:

主要是利用了棧的結構,在表示式的輸入過程中實現對括號是否匹配的判斷。根據其括號的原則:小括號之中不能含有大括號或中括號,中括號中不能含有大括號。

再由緊密性,左邊括號和右邊括號是緊密相連的。否則判斷為錯。 其操作為:

每輸入一個字元打一下回車,若輸入括號順序錯誤則跳出,並顯示錯誤!

附:#include

#define max 100

#define true 1

#define false 0

#define e a

typedef struct transition /*建立一個棧*/

sqstack;

sqstack bt;

int emptysqstack(sqstack bt) /*判棧空*/

void pushsqstack(sqstack bt,char sh) /*入棧*/

bt.top++;

bt.sq[bt.top]=sh;

}void popsqstack(sqstack bt) /*出棧*/

sh=bt.sq[bt.top];

bt.top--;

return sh;

}search(sqstack bt) /*查詢括號是否匹配*/

searcha(bt,c);

searchb(bt,c);

searchc(bt,c);

}searcha(sqstack bt,char c) /*查詢小括號是否匹配*/

')if(c=='(')

printf("right\n");

else if(c=='['||c==']'||c=='')

printf("wrong\n");} }

searchb(sqstack bt,char c) /*查詢中括號是否匹配*/

')if(c==')'||c=='')

printf("wrong\n");

else if(c=='(')

searcha(bt,c);

else if(c==']')

printf("right\n");

else

printf("wrong\n");

} searchc(sqstack bt,char c) /*查詢大括號是否匹配*/

if(c==']'||c==')')

printf("wrong\n");

else if(c=='[')

searchb(bt,c);

else if(c=='(')

searcha(bt,c);

else if(c=='}')

printf("right\n");

else

printf("wrong\n");

} main()

else

exit(0);}

求多項式中括號匹配演算法~~(有關資料結構,c++實現)

6樓:

括號可以用棧來匹配啊, 資料結構中的運算子優先法就是用棧實現的,

左右括號都是運算子,規定(優先順序最底,要入棧到運算子棧, 其他運算子優先都要高於( 但低於),其他運算子之間的優先關係暫且忽略不說,也就是當讀取到) 的時候, 括號內運算一定會結束並得出一個結果進入到運算元棧(由於 ) 的優先順序比其他所有運算子都高,其他運算子要出棧運算,並且把結果入到運算元棧),然後就是檢查運算元棧棧頂是否是左括號,如果是在左括號出棧,這樣左右括號就一起消掉,如果不是,則報錯,你要檢查你的運算子優先表的定義,因為根據定義,到讀取到右括號的時候,括號內的運算會結束並得出結果, 空括號不影響計算, 只是沒有運算元入棧而已,而且可以巢狀括號 , 規定好了優先順序,可以實現多種不同優先順序的括號的混合運算

c++裡面的表示式括號匹配問題,求高手看看下面的****有問題

對輸入的一段c或者c++**(只要求其中一種),檢查各種括號是否配對,以及配對的情況。 5

7樓:中華小逗比

#include

#include

char a[10010];

int main()

}if(top==-1)

printf("yes\n");

else

printf("no\n");

}return 0;}

括號匹配問題c++,需要具體配對~實在不想寫給個思路也行。

8樓:匿名使用者

用stack資料結構, ( push, ) pop, 記錄位置等資料

9樓:阿彌陀佛

用棧來儲存左括號啊,遇見一個左括號就進棧,遇見一個右括號就退棧啊,就與退棧出來的值配對了。

關於c 的問題

有區別 char str 定義的是一個指標 可以改變指標的方向,即str指向的地址的是可以改變的 char str 定義的是一個字元陣列,可以改變陣列裡面字元的值,但是str的地址是不變的 char str 這個是不合法的,要指明大小。指標是不需要大小的。即後分配。char str 10 str本身...

關於c語言小問題,關於C語言一個小問題

if語句不能這樣用,當需要判斷多個條件時,需要各自用括號括起來,再用邏輯與符號 或者邏輯或符 連線。貼段 給你參考,功能是a,b,c三者相等時輸出case 1,我用gcc編譯器驗證過了。include int main void else printf n n return 0 c語言一個小問題。如...

關於有效數字運演算法則問題,關於有效數字運演算法則問題

整數應當看做無限位有效數字。與整數相乘,有效數字位數不減少。關於有效數字運算規則 加減法 在加減法運算中,保留有效數字的以小數點後位數最小的為準,即以絕對誤差最大的為準,例如 0.0121 25.64 1.05782 正確計算 不正確計算 0.01 0.0121 25.64 25.64 1.06 1...