標籤:
編程題#4:擴號匹配問題
來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最後成績。)
注意: 總時間限制: 1000ms 記憶體限制: 65536kB
描述
在某個字串(長度不超過100)中有左括弧、右括弧和大小寫字母;規定(與常見的算數式子一樣)任何一個左括弧都從內到外與在它右邊且距離最近的右括弧匹配。寫一個程式,找到無法匹配的左括弧和右括弧,輸出原來字串,並在下一行標出不能匹配的括弧。不能匹配的左括弧用"$"標註,不能匹配的右括弧用"?"標註.
輸入
輸入包括多組資料,每組資料一行,包含一個字串,只包含左右括弧和大小寫字母,字串長度不超過100
注意:cin.getline(str,100)最多隻能輸入99個字元!
輸出
對每組輸出資料,輸出兩行,第一行包含原始輸入字元,第二行由"$","?"和空格組成,"$"和"?"表示與之對應的左括弧和右括弧不能匹配。
範例輸入
((ABCD(x) )(rttyy())sss)(
範例輸出
((ABCD(x)
$$
)(rttyy())sss)(
? ?$
#include<iostream>#include<stdio.h>#include<stack>#include<string.h>using namespace std;int main() { int i; char str[101], Mark[101]; while(scanf("%s", str) != EOF) { stack<char> S; for (i = 0; i < strlen(str);i++) { if (str[i] == ‘(‘) { S.push(i); Mark[i] = ‘ ‘; } else if (str[i] == ‘)‘) { if (S.empty()) { Mark[i] = ‘?‘; } else { Mark[i] = ‘ ‘; S.pop(); } } else { Mark[i] = ‘ ‘; } } while (!S.empty()) { Mark[S.top()] = ‘$‘; S.pop(); } Mark[i] = ‘\0‘; puts(str); puts(Mark); } return 0;}
POJ C程式設計進階 編程題#4:括弧匹配問題