Префикс для вставки в стек

Я пытаюсь реализовать префикс для инфикса в C++, это то, что я получил до сих пор. Например, входные данные должны быть примерно такими:

/7+23

И выход:

7/(2+3) or (7/(2+3))

Но вместо этого я получаю:

(/)

Вот код, который я написал до сих пор:

void pre_to_in(stack<char> eq) {
    if(nowe.empty() != true) {
        char test; 
        test = eq.top();
        eq.pop();
        if(test == '+' || test == '-' || test == '/' || test == '*') {
            cout << "(";
            pre_to_in(eq);
            cout << test;
            pre_to_in(eq);
            cout << ")";
        } else {
            cout << test;
        }
    }   
} 


// somewhere in main()
char arr[30];
stack<char> stosik;
int i = 0;
cout << "write formula in prefix notation\n";
cin >> arr;

while(i < strlen(arr)) {
    stosik.push(arr[i]);
    i++;        
} 
pre_to_in(stc);

3 ответа

  1. Это стек. Сначала в, последний из. Вам нужна обратная строка ввода "32+7/".

  2. Вы используете много стеков. При каждом входе в стек pre_to_in() копируется. Используйте ссылку или указатель, например: void pre_to_in(stack<char> &eq);

Это все.

PS Унификация имен (s/nowe/eq/g && s/stc/stosik/g)

cin >> arr;

читает только одно "слово" ввода, а не целую строку. Здесь только первый слэш-персонаж.

Не уверен, что если вы ищете такое решение, в любом случае для упомянутого вами материала оно дает вывод из вашего поста

он читает токены из ввода std

Я построил его сейчас под Visual Studio 2005 - чтобы завершить ввод, нажмите Enter, Ctrl+Z, Enter

но на других компиляторах прекращение может работать по-другому

#include <algorithm>
#include <deque>
#include <iostream>
#include <string>

typedef std::deque< std::string > tokens_t;

void pre_to_in( tokens_t* eq ) 
{
    if ( !eq->empty() ) {
        const std::string token = eq->front();
        eq->pop_front();
        if ( ( token == "+" ) || ( token == "-" ) || ( token == "/" ) || ( token == "*" ) ) {
            std::cout << "(";
            pre_to_in( eq );
            std::cout << token;
            pre_to_in( eq );
            std::cout << ")";
        } else {
            std::cout << token;
        }
    }   
} 


int main()
{
    std::cout << "write formula in prefix notation" << std::endl;

    tokens_t tokens;
    std::copy(
        std::istream_iterator< std::string >( std::cin ),
        std::istream_iterator< std::string >(),
        std::back_inserter( tokens ) );

    pre_to_in( &tokens );
}
Другие вопросы по тегам