Изломы в моей действительной проверке выражений - PullRequest
0 голосов
/ 01 мая 2018

Ясно, что у меня возникли проблемы с моим действительным оператором выражения. Теоретически, я сначала понимаю концепцию проверки открывателей области, и если вы видите область ближе без открывателя области, то она недопустима. Я не слишком уверен, что это нарисованные мной диаграммы или что, но все же, как я уже сказал, я просто немного растерялся, когда речь заходит об использовании алгоритма при кодировании, какие-нибудь советы? Кроме того, мой профессор сказал мне использовать здесь переключение регистра? Какую пользу это принесет мне? Разве мне не нужны 3 разных переключателя дел для открывателей и доводчиков, когда на самом деле все, что мне нужно, это утверждение if?

 //=============use case switch here
    void check_expression(char expression[80], bool& valid)
    {
        Stack symbStack;  //stack to hold scope openers
        char symbol, //current symbol in the expression being investigated
        top_symb;  //current scope opener at the top of the stack
        int i = 0; //subscript to element in expression array, initialized to
                   //first element 

        valid = true;  
        symb = expression[i];
        while(symb != '\0') //while symbol in expression is not the null terminator
        {
                if( symbol == '{' || symbol == '[' || symbol == '(' )
                {
                    symbStack.Push(symbol);
                }

                else if( symbol == '}' || symbol == ']' || symbol == ')' )
                {
                    if(symbStack.IsEmpty())
                    {
                        cout << "Expression is invalid!";
                        valid == false;
                    }

                    else
                    {
                        top_symb = symbStack.StackTop();
                        symbStack.Pop();

                        if(  (top_symb == '(' && symbol != ')') ||  
                             (top_symb == '[' && symbol != ']') ||
                             (top_symb == '{' && symbol != '}')   )
                        {
                            valid = false;
                        }
                    }
                }
                i++;  //incrememt the subscript to the next character in the expression.
                symb = expression[i]; //assign symb to the next character in expression.
        }

        //Check to see if the stack is not empty.  If it is not empty, then 
        //the expression is invalid, in which case you want to assign valid to false
        return;
    }

1 Ответ

0 голосов
/ 01 мая 2018
valid == false;
     ^^^^

Вот твой виновник. Избавьтесь от одного из этих =, и вы должны быть хорошими.

Если вы понимаете, что смотрите на недопустимое выражение, вы можете немедленно вернуться! После этого выражение не может стать действительным. Таким образом, вы можете добавить return; после установки valid на false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...