看看括號是否匹配
阿新 • • 發佈:2018-12-17
括號的匹配
最簡單的版本
只有一個小括號
題目
問題描述:
任意給定一個字串,字串中包含除了空格、換行符之外的任意字元。你的任務是檢測字串中的小括號是否配對,即“(”與“)”是否配對。如字串“((a+b)(c+d))”中小括號是配對的,而“((a+b))c+d))”則不配對。
輸入與輸出要求:
輸入一個長度不超過100的非空字串,該字串中不會出現空格、換行符。輸出檢測結果。
程式執行效果:
Sample 1:
((a+b)*(c+d)) ↙
parentheses match!↙
Sample 2:
((a+b)*)c+d)) ↙
parentheses do not match!↙
程式碼
//迴圈中不斷的條件判斷,簡單的想法 #include <stdio.h> int main() { char A[1000],c1=0,c2=0,ret=0; gets(A); for(int i=0; A[i] !='\0';i++) { if(A[i]=='(') { c1++; } if(c1<0) { printf("parentheses do not match!"); return 0; } if(A[i]==')') { c1--; } } if(c1==0) { printf("parentheses match!"); } else { printf("parentheses do not match!"); } return 0; }
心得體會
首先的想法是對左右括號進行計數,突然覺得沒有這麼簡單,於是上網一搜,都是複雜的版本,造成思路的混亂,還是沒研究通,後續再補上。
核心就是對括號計數,保證c1>=0,c1 就是左括號數-右括號數,在每輪迴圈中檢查 , 就能確定左右括號的出現的順序
if(c1<0)
{
printf("parentheses do not match!");
return 0;
}