題目1153:括號匹配問題
時間限制:1 秒
內存限制:32 兆
特殊判題:否
提交:6726
解決:2926
- 題目描述:
-
在某個字符串(長度不超過100)中有左括號、右括號和大小寫字母;規定(與常見的算數式子一樣)任何一個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫一個程序,找到無法匹配的左括號和右括號,輸出原來字符串,並在下一行標出不能匹配的括號。不能匹配的左括號用"$"標注,不能匹配的右括號用"?"標注.
- 輸入:
-
輸入包括多組數據,每組數據一行,包含一個字符串,只包含左右括號和大小寫字母,字符串長度不超過100。
注意:cin.getline(str,100)最多只能輸入99個字符!
- 輸出:
-
對每組輸出數據,輸出兩行,第一行包含原始輸入字符,第二行由"$","?"和空格組成,"$"和"?"表示與之對應的左括號和右括號不能匹配。
- 樣例輸入:
-
)(rttyy())sss)(
- 樣例輸出:
-
)(rttyy())sss)( ? ?$
#include <iostream> #include<stdio.h> #include<stack> using namespace std; stack<int> S; char str[110]; char ans[110]; int main() { while(scanf("%s",str)!=EOF) { int i; for(i=0;str[i]!=0;i++) { if(str[i]=='(') { S.push(i); ans[i]=' '; }else if(str[i]==')') { if(S.empty()==false) { S.pop(); ans[i]=' '; }else ans[i]='?'; }else ans[i]=' '; } while(!S.empty()) { ans[S.top()]='$'; S.pop(); } ans[i]=0; puts(str); puts(ans); } return 0; }
