我正在尝试用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);
答案 0 :(得分:1)
这是一个堆栈。先进先出。您需要反向输入字符串“32 + 7 /".
您使用多个堆栈。在每个输入到pre_to_in()的堆栈中都会被复制。使用引用或指针,例如:void pre_to_in(stack<char> &eq);
多数人。
P.S。统一名称(s / nowe / eq / g&amp;&amp; s / stc / stosik / g)
答案 1 :(得分:0)
cin >> arr;
只读取输入的一个“单词”,而不是整行。在这里它只获得第一个斜线字符。
答案 2 :(得分:0)
不确定您是否正在寻找此类解决方案,无论如何您输入的输入都会提供您的输出
它从标准输入中读取标记
我现在在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 );
}