(藍橋)2017C/C++A組第七題正則問題

#include<iostream>  
#include<memory.h>
#include<stack>
#include<string>
using namespace std;
/*
主要思想是,利用棧,將輸入的字符一個個壓入棧中,遇到右括號,則彈出,直到
遇到左括號,而後將彈出的字符串進行解析,找到所表明的字符串,而後再壓入棧中
最後棧中剩下的就是沒有括號的表達式了,而後再解析一遍表達式,就獲得答案了 
*/
int main()
{
    stack<char>sta;
    string re;//輸入的表達式 
    cin >> re;
    for (int j = 0; j<re.length(); j++)
    {
        if (re[j] == '(' || re[j] == 'x' || re[j] == '|')
            sta.push(re[j]);
        if (re[j] == ')')
        {
            string out = "";//用來接收括號內的表達式 
            while (!sta.empty())
            {
                if (sta.top() == '(')//遇到左括號中止
                {
                    sta.pop();
                    break;
                }
                else
                {
                    char temp =sta.top();
                    out.push_back(temp);
                    sta.pop();
                }

            }
            //如下開始解析獲得的字符串,用來求整個表達式的值 
            int max = 0;
            int count = 0;
            for (int i = 0; i<out.length(); i++)
            {
                if (out[i] == 'x')
                    count++;
                if (out[i] == '|')
                {
                    if (count>max)
                        max = count;
                    count = 0;
                }
            }
            if (count>max)
                max = count;
            for (int i = 0; i<max; i++)
            {
                sta.push('x');
            }
        }
    }
    
    //最後解析整個堆棧內存的字符串 
    int max = 0;
    int count = 0;
    while (!sta.empty())
    {
        if (sta.top() == 'x')
        {
            count++;
            sta.pop();
        }
        else if (sta.top() == '|')
        {
            sta.pop();
            if (count>max)
                max = count;
            count = 0;
        }
    }
    if (count>max)
        max = count;
    cout << max;
}
相關文章
相關標籤/搜索