Неожиданное исключение, - PullRequest
0 голосов
/ 21 октября 2019
string itop(string ex)
{
    int x, n = 0, c = 0;
    stack s;
    char check;
    string nw;
    if (ex.empty())
    {
        string empty_ex = "Expression is Empty.";
        return empty_ex;
    }
    for (x = 0; x < ex.length(); x++)
    {
        if (ex[x] == '(' || ex[x] == '{' || ex[x] == '[')
        {
            s.push(ex[x]);
            n++;
            continue;
        }
        if (ex[x] == '*' || ex[x] == '/')
        {
            s.push(ex[x]);
            continue;
        }
        if (ex[x] == '+' || ex[x] == '-')
        {
            check = s.pop();
            if (check == '*' || check == '/')
            {
                nw[c] = check;
                c++;
                s.push(ex[x]);
                continue;
            }
            s.push(check);
            s.push(ex[x]);
            continue;
        }
        if (ex[x] == ')')
        {
            check = s.pop();
            while (check != '(' && check != '{' && check != '[')
            {
                nw[c] = check;
                c++;
                check = s.pop();
            }
            if (check != '(')
            {
                cout << "Round Bracket is misplaced." << endl;
                n++;
                s.push(check);
                continue;
            }
            if (check == '(')
            {
                n--;
                continue;
            }
        }
        if (ex[x] == '}')
        {
            check = s.pop();
            while (check != '(' && check != '{' && check != '[')
            {
                nw[c] = check;
                c++;
                check = s.pop();
            }
            if (check != '{')
            {
                cout << "Curly Bracket is misplaced." << endl;
                n++;
                s.push(check);
                continue;
            }
            if (check == '{')
            {
                n--;
                continue;
            }
        }
        if (ex[x] == ']')
        {
            check = s.pop();
            while (check != '(' && check != '{' && check != '[')
            {
                nw[c] = check;
                c++;
                check = s.pop();
            }
            if (check != '[')
            {
                cout << "Square Bracket is misplaced." << endl;
                n++;
                s.push(check);
                continue;
            }
            if (check == '[')
            {
                n--;
                continue;
            }
        }
        check = s.pop();
        s.push(check);
        cout << ex[x] << "\t"<<check;
        nw[c] = ex[x];
    //  c++;
    }
    return nw;
}

int main()
{
    cout << itop("(2+2)");

    return 0;
}

Когда значения массива char (строки) отображаются явно, они работают нормально, но когда дело доходит до сохранения одних и тех же символов в строке, это вызывает исключение в виде бесконечного цикла. Почему это так ? По сути, считается, что при обнаружении операнда он отправляется в строку nw , а если оператор найден, то он отправляется в стек.

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