XDOJ 307 括號匹配的檢驗
***喜歡請點個贊,代碼人會超開心的!!!***😊🦄🎈
問題描述
假設一個運算式或一段程式中含有三種括號:圓括號“(”和“)”、方括號“[”和“]”、花括號“{”和“}”,試寫一個程式判別給定的運算式或程式中所含括號是否正確配對出現,
輸入說明
每行為一個含有括號的運算式或一段程式,
輸出說明
輸出一個right或wrong,表明正確匹配與否,
輸入樣例
while (m<(a[8]+t) {m=m+1; t=t-1;}
輸出樣例
wrong
解決思路
- 用堆疊來解決
- 遇到左括號入堆疊,遇到右括號則與堆疊頂元素相比較看是否匹配,如果不匹配說明可能出現了(({)這種情況,則直接判錯flag=0,退出回圈;如果匹配則出堆疊,檢驗下一個元素,
- 如果flag=1且堆疊為空(top=-1)則說明正確配對,輸出right
完整代碼
#include<stdio.h>
#include<string.h>
int main()
{
char str[100],stack[100],top;
top=-1;//top=-1表示堆疊為空,入堆疊top加一然后入堆疊,出堆疊top-1
gets(str);
int i,len,flag=1;
len=strlen(str);//字串的長度
for(i=0;i<len;i++)
{
if(str[i]=='('||str[i]=='{'||str[i]=='[')//左括號入堆疊
{
top++;
stack[top]=str[i];
}
if(str[i]==')')
{
if(stack[top]=='(')//右括號匹配
top--;
else//右括號不匹配
{
flag=0;break;
}
}
if(str[i]=='}')
{
if(stack[top]=='{')
top--;
else
{
flag=0;break;
}
}
if(str[i]==']')
{
if(stack[top]=='[')
top--;
else
{
flag=0;break;
}
}
}
if(flag==1&&top==-1)//左右括號都匹配且堆疊空
printf("right");
else
printf("wrong");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/236138.html
標籤:其他
