7-2 符號配對 (20 分)
請編寫程式檢查c語言源程式中下列符號是否配對:/與/、(與)、[與]、。
輸入格式:
輸入為乙個c語言源程式。當讀到某一行中只有乙個句點.和乙個回車的時候,標誌著輸入結束。程式中需要檢查配對的符號不超過100個。
輸出格式:
首先,如果所有符號配對正確,則在第一行中輸出yes,否則輸出no。然後在第二行中指出第乙個不配對的符號:如果缺少左符號,則輸出?-右符號;如果缺少右符號,則輸出左符號-?。
輸入樣例1:
void test()
.輸出樣例1:
no/*-?
輸入樣例2:
void test()].
輸出樣例2:
no?-]
輸入樣例3:
void test()
.輸出樣例3:
yes這個題一看到的時候我想用雙端佇列,那個時候我沒考慮全面,如果說這個錯誤符號在最後面,那麼更難了。基本思路就是遇到前符號就入棧,遇到後符號就檢視棧頂是不是相同,如果棧頂不相同,那麼這個符號和棧頂符號有乙個是錯的。這時候接著判斷棧頂下面那個符號,如果這個符號和當前符號相同,那麼就是棧頂錯了。
下面直接上**,其中踩坑的地方在於
1.一開始就沒有把所有情況想到,以至於我沒有判空,導致第二個例子就過不去。
2.程式編寫過程中,的那個/*,我判斷的時候應該是兩個,這個沒錯,我想要在其中if語句上面多乙個i++,來防止之後不會重新判斷 星號(不知道為什麼csdn這裡打星號是斜體),但是我後面又用了個if語句,還是判斷的與之前的i有關的數,這導致後面直接就全錯了,所以這個下次要注意if else語句的使用,如果想加快 i 的遍歷,那麼改變了 i 之後,後面最好就不要有與之前 i 相關的東西了。
3.最後還有一點就是,pta好像是只判斷你的輸出是什麼,我是直接找出錯誤符號就停止程式了,以至於後面的點都輸入不進去。但是也給過了。
這個**還需要優化。不能那麼多中斷main。。。
#include
#include
#include
#define initsize 50
#define changesize 10
using
namespace std;
struct stack
; stack fuhao;
char index[8]
=',']'
,')'};
void
push
(char a)
*fuhao.top++
=a;}
char
pop(
)bool
isempty
(stack a)
else
return
false;}
char
gettop()
//int getindex(char a)
//}int
main()
for(
int i=
0;str[i]
;i++
)else
if(str[i]
=='/'
&&str[i+1]
=='*'
)else
if(str[i]
==')'
)elseif(
gettop()
=='('
)elseif(
*(fuhao.top-2)
=='('
)else
}else
}else
if(str[i]
==']'
)elseif(
gettop()
=='['
)elseif(
*(fuhao.top-2)
=='['
)else
}else
}else
if(str[i]
=='}'
)elseif(
*(fuhao.top-1)
=='elseif(
*(fuhao.top-2)
=='else
}else
}else
if(str[i]
=='*'
&&str[i+1]
=='/'
)elseif(
gettop()
=='<'
)elseif(
*(fuhao.top-2)
=='<'
)else
}else}}
}}
7 2 符號配對 20分
請編寫程式檢查c語言源程式中下列符號是否配對 與 與 與 輸入為乙個c語言源程式。當讀到某一行中只有乙個句點.和乙個回車的時候,標誌著輸入結束。程式中需要檢查配對的符號不超過100個。首先,如果所有符號配對正確,則在第一行中輸出yes,否則輸出no。然後在第二行中指出第乙個不配對的符號 如果缺少左符...
PAT 符號配對
5 4 符號配對 20分 請編寫程式檢查c語言源程式中下列符號是否配對 與 與 與 輸入為乙個c語言源程式。當讀到某一行中只有乙個句點.和乙個回車的時候,標誌著輸入結束。程式中需要檢查配對的符號不超過100個。首先,如果所有符號配對正確,則在第一行中輸出yes,否則輸出no。然後在第二行中指出第乙個...
2 8 符號配對
請編寫程式檢查c語言源程式中下列符號是否配對 與 與 與 輸入格式 輸入為乙個c語言源程式。當讀到某一行中只有乙個句點.和乙個回車的時候,標誌著輸入結束。程式中需要檢查配對的符號不超過100個。輸出格式 首先,如果所有符號配對正確,則在第一行中輸出yes,否則輸出no。然後在第二行中指出第乙個不配對...