POJ C程序設計進階 編程題#4:括號匹配問題


編程題#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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM