假設表示式中允許包含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...