題目1153:括號匹配問題(棧的應用)


題目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;
}

 


免責聲明!

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



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