1353:表達式括號匹配(stack)

【題目描述】

假設一個表達式有英文字母(小寫)、運算符(+/+,—,∗,/)和左右小(圓)括號構成,以“@@”作爲表達式的結束符。請編寫一個程序檢查表達式中的左右圓括號是否匹配,若匹配,則返回“YESYES”;否則返回“NONO”。表達式長度小於255255,左圓括號少於2020個。

【輸入】

一行數據,即表達式。

【輸出】

一行,即“YESYES” 或“NONO”。

【輸入樣例】

2*(x+y)/(1-x)@

【輸出樣例】

YES

【提示】

【樣例輸入2】

(25+x)*(a*(a+b+b)@

【樣例輸出2】

NO

#include <iostream>
using namespace std;

int main()
{
    char ch = 0;
    int cnt = 0;
    while (ch != '@') {
        // cin >> ch; // none space
        ch = cin.get();
        switch (ch) {
            case '(':
                cnt++;
                break;
            case ')':
                cnt--;
                if (cnt < 0) {
                    ch = '@';
                }
                break;
            case '@':
                break;
        }
    }
    if (cnt == 0) {
        cout << "YES";
    } else {
        cout << "NO";
    }
    return 0;
}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章