日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十一、括号匹配

發布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十一、括号匹配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

十一、括號匹配

文章目錄

  • 十一、括號匹配
    • 題目描述
    • 解題思路
    • 上機代碼

題目描述

假設一個算術表達式中包含有三種類型的括號:圓括號()、方括號[ ]和花括號{ }。編寫一個判斷表達式中括號是否匹配的程序,匹配返回Match succeed!,否則返回Match false!。

例:[1+2 * (3+4*(5+6))] 括號匹配

? (1+2)(1+2[(1+2)+3) 括號不匹配

  • 輸入:包含圓括號、方括號和花括號的表達式

  • 輸出:匹配輸出 Match succeed! 不匹配輸出 Match false!

例:

輸入:[1+2* (3+4*(5+6))]

輸出:Match succeed!

測試輸入期待的輸出時間限制內存限制額外進程
測試用例 1[1+2*(3+4*(5+6))]Match succeed!1秒64M0
測試用例 2(1+2)*(1+2*[(1+2)+3)Match false!1秒64M0

解題思路

題目本身十分簡單,不用在意輸入的數字,僅對括號進行配對即可。遇到左邊括號統統進棧,遇到右邊括號則進行配對

  • 如果有其中任意一對括號無法配對,直接報錯
  • 所有括號都成功配對,則匹配成功

正常情況下,字符串掃描結束后棧應該為空,如果棧里面還剩余左括號,也要報錯。

上機代碼

對于括號的判斷,用 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; }

    總結

    以上是生活随笔為你收集整理的十一、括号匹配的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。