1. 程式人生 > >看看括號是否匹配

看看括號是否匹配

括號的匹配

最簡單的版本

只有一個小括號

題目

問題描述:
任意給定一個字串,字串中包含除了空格、換行符之外的任意字元。你的任務是檢測字串中的小括號是否配對,即“(”與“)”是否配對。如字串“((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;
        }