生活随笔
收集整理的這篇文章主要介紹了
十一、括号匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
十一、括號匹配
文章目錄
題目描述
假設一個算術表達式中包含有三種類型的括號:圓括號()、方括號[ ]和花括號{ }。編寫一個判斷表達式中括號是否匹配的程序,匹配返回Match succeed!,否則返回Match false!。
例:[1+2 * (3+4*(5+6))] 括號匹配
? (1+2)(1+2[(1+2)+3) 括號不匹配
例:
輸入:[1+2* (3+4*(5+6))]
輸出:Match succeed!
測試輸入期待的輸出時間限制內存限制額外進程
| 測試用例 1 | [1+2*(3+4*(5+6))] | Match succeed! | 1秒 | 64M | 0 |
| 測試用例 2 | (1+2)*(1+2*[(1+2)+3) | Match false! | 1秒 | 64M | 0 |
解題思路
題目本身十分簡單,不用在意輸入的數字,僅對括號進行配對即可。遇到左邊括號統統進棧,遇到右邊括號則進行配對
- 如果有其中任意一對括號無法配對,直接報錯
- 所有括號都成功配對,則匹配成功
正常情況下,字符串掃描結束后棧應該為空,如果棧里面還剩余左括號,也要報錯。
上機代碼
對于括號的判斷,用 if - else 和 swtich - case 的方式本質都是一致的,不過是寫法不同而已。
if - else 方式
#include<iostream>
#include<stack>
#include<string.h>
#include<cstdio>
using namespace std;
int main()
{ stack<char>s;char str[100]; char ch; int len = 0; gets(str); len = strlen(str);//掃描字符串,僅判斷括號for (int i = 0; i < len; i++) {//左邊擴號統統進棧if (str[i] == '(' || str[i] == '[' || str[i] == '{') {s.push(str[i]); }//右邊括號則嘗試進行匹配if (str[i] == ')') {ch = s.top(); if (ch == '(') //配對成功則繼續{ s.pop(); } else //不成功則報錯{ printf("Match false!\n");return 0; } } if (str[i] == ']') { ch = s.top(); if (ch == '[') { s.pop(); } else { printf("Match false!\n");return 0; } } if (str[i] == '}') { ch = s.top(); if (ch == '{') { s.pop(); } else { printf("Match false!\n"); return 0; } } }//判斷棧是否為空if(s.empty())printf("Match succeed!\n"); elseprintf("Match false!\n");return 0;
}
swtich - case 方式
#include<cstdio>
#include<cstdlib>
#include<stack>
#include<cstring>
using namespace std;int main()
{stack<char> s;char str[100];scanf("%s", str);int len = 0;len = strlen(str);//掃描字符串,僅判斷括號for(int i = 0; i < len; i++){//判斷當前字符switch(str[i]){//左邊擴號統統進棧case '(': case '[': case '{':{s.push(str[i]);break;}//右邊括號則嘗試進行匹配case ')':{if(s.top() == '(')//配對成功則繼續s.pop();else //不成功則報錯{printf("Match false!\n");return 0;}break;}case ']':{if(s.top() == '[')s.pop();else{printf("Match false!\n");return 0;}break;}case '}':{if(s.top() == '{')s.pop();else{printf("Match false!\n");return 0;}break;}//除括號外其他字符直接略過default:break;}}if(s.empty())printf("Match succeed!\n"); elseprintf("Match false!\n");return 0;
}
總結
以上是生活随笔為你收集整理的十一、括号匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。