基於棧的表示式中多種括號匹配演算法

2021-09-22 16:42:16 字數 1283 閱讀 6485

假設表示式中允許包含3種括號:圓括號、方括號和大括號。設計乙個演算法採用順序棧判斷表示式中的括號是否正確匹配。

基本思路如下:例項化乙個字元棧,維持乙個bool變數flag,初始化為true。然後遍歷整個表示式:

如果是三種正括號『(』   '['   '',則對比棧頂元素,如果是正好對應的正括號,則將其從棧中彈出,否則flag設為false,break停止迴圈;

如果是其他字元,跳過;

最後判斷,如果flag為true且棧為空,則括號正確匹配,否則不正確匹配。

**如下:

// 目前我在複習c++,暫時對泛型程式設計那一塊不太熟悉了,所以先定義另外的字元棧,下次再用模板吧。

// stackforchar.h 字元棧

#include using namespace std;

class stackforchar

~stackforchar()

bool push(const char item)

ptr[++top] = item;

return true;

}bool pop(char & item)

item = ptr[top--];

return true;

}bool isempty()

};

// verification.h 驗證函式

#include #include "stackforchar.h"

#include using namespace std;

void verification(string expression)

else if (expression[i] == ')')

}else if (expression[i] == ']')

}else if (expression[i] == '}')}}

if (flag && stack.isempty()) cout << "all right!" << endl;

else cout << "error!!!" << endl;

}

// main.cpp 主函式

#include #include "transform.h"

#include #include "verification.h"

using namespace std;

int main()

表示式括號匹配(棧)

鏈結 假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。一行 表示式 一行 yes 或 no 輸入 1複製 2 x y 1 x 輸出...

棧的應用 表示式括號匹配

時間限制 1000 ms 記憶體限制 65536 kb 假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入 一行資料,即表示式。...

表示式括號匹配

假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no 輸入樣例 1 2 x y...