【问题标题】:prefix to infix on stack堆栈上中缀的前缀
【发布时间】:2009-12-09 22:37:43
【问题描述】:

我正在尝试在 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);

【问题讨论】:

  • 这是作业吗?如果是这样,请将其标记为这样。
  • 感谢您先尝试该问题,然后向我们展示您拥有的所有信息。 谢谢。
  • 你的意思是按值复制,还是忘记了&,即:pre_to_in(stack& eq)?
  • @Mic。问题已解决。谢谢。

标签: c++ algorithm prefix infix-notation


【解决方案1】:
  1. 这是一个堆栈。先入后出。你需要反向输入字符串“32+7/”。

  2. 您使用了许多堆栈。在每次进入 pre_to_in() 堆栈时都会被复制。使用引用或指针,例如:void pre_to_in(stack&lt;char&gt; &amp;eq);

就是这样。

附:统一名称(s/nowe/eq/g && s/stc/stosik/g)

【讨论】:

【解决方案2】:
cin >> arr;

只读取输入的一个“单词”,而不是整行。这里只获取第一个斜线字符。

【讨论】:

  • 怪我,我添加了额外的空格来澄清输入和输出。问题已解决。不幸的是,这不是一个解决方案。
【解决方案3】:

不确定您是否正在寻找这样的解决方案,无论如何,对于您提到的输入,它会给出您发布的输出

它从标准输入中读取标记

我现在在 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 );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2013-02-26
    • 2021-10-02
    • 2013-03-28
    • 2018-10-02
    • 2015-05-22
    • 2015-05-09
    • 2015-09-12
    相关资源
    最近更新 更多