判斷一個字串中括號是否匹配
阿新 • • 發佈:2019-02-03
思路:
1. 括號匹配的四種可能性:
①左右括號配對次序不正確②右括號多於左括號
③左括號多於右括號
④左右括號匹配正確
2. 演算法思想:
1.順序掃描算數表示式(表現為一個字串),當遇到左括號時候讓該括號儲存至list;
2.當掃描到右括號時,檢視當前list裡面是否有內容,若為空,說明格式不對,返回錯誤標識。如果有內容,則彈出list末尾元素;
3.字串迴圈掃描結束時,若list非空(即list中尚有左括號),則說明左括號多於右括號,匹配失敗。若list為空,說明左右括號格式正確,返回正確標識;
程式碼實現:
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <vector> #include <list> using namespace std; bool CheckBrackets(char *str) { list<char> lChar; int nStrLen = strlen(str); for (int i = 0;i < nStrLen; i++) { if (str[i] == '(') { lChar.push_back(str[i]); } if (str[i] == ')') { if (lChar.empty()) return false; lChar.pop_back(); } } if (lChar.empty()) return true; return false; } int main(int argc, char* argv[]) { char str[] = "(aaaa(bbbbb)(cccc)dddd)"; bool bRet = CheckBrackets(str); if (bRet) printf_s("字串中括號格式正確!\n"); else printf_s("字串中括號格式錯誤!\n"); system("pause"); return 0; }