#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(void) {
// creating a stack of characters
std::stack<char> stk;
// exp will store the current read expression
string exp;
// number of tes cases
int test;
std:: cin >> test;
// 1st for loop to be run up to value of test.
// Added a few "cout"s for debugging for my own.
for(int i=1;i<=test;i++)
{
cout<<"into the loop\n";
getline (cin,exp);
cout<< "have read the expression";
std:: cout << exp;
int explength= exp.length();
cout << explength;
// this loop will run up to the length of the string
for(int j=0;j<explength;j++)
{ // if the read character is a small case char,print it
if(exp.at(j)>=97 && exp.at(j)<=122)
std::cout << exp.at(j);
// Handling special symbols
// high to low : (),/,*,-,+
else
{
if(exp.at(j)=='(')
stk.push('(');
else if (exp.at(j) == ')')
{
while (stk.top()!='(')
{
std::cout << stk.top();
stk.pop();
}
stk.pop();
}
else if (exp.at(j) == '^')
{
while (stk.top()!='^')
{
std::cout <<stk.top();
stk.pop();
}
stk.push('^');
}
else if (exp.at(j) == '/')
{
while (stk.top()!='/' || stk.top()!='^' )
{
std::cout << stk.top();
stk.pop();
}
stk.push('/');
}
else if (exp.at(j) == '*')
{
while (stk.top()!='*' || stk.top()!='/' || stk.top()!='^')
{
std::cout << stk.top();
stk.pop();
}
stk.push('*');
}
else if (exp.at(j) == '-')
{
while (stk.top()!='-' || stk.top()!='*' || stk.top()!='/' || stk.top()!='^')
{
std::cout << stk.top();
stk.pop();
}
stk.push('-');
}
else if (exp.at(j) == '+')
stk.push('+');
}
}
std::cout << endl;
}
return 0;
}
此代码采用&#34; test&#34;表达式的数量,逐个处理,将每个表达式作为字符串处理,并将其RPN输出到控制台。第一个循环是阅读&#34;测试&#34;表达式数和第二个for循环包含处理每个字符串的逻辑。由于这是我的第一个STL程序,因此该代码可能包含一些愚蠢的函数调用。
我正在尝试使用C ++ STL中的堆栈将给定的表达式数更改为Reverse Polish Notation。当我在Ideone上运行此代码时,代码进入1st for循环但不打印读取的表达式&#34; string exp&#34;。当我在我的Windows PC(G ++编译器)上运行它时,它不会在1st for循环中打印任何内容。它有时会在Ideone上产生分段错误和一些时间内存信号。太沮丧了。我尝试用GDB调试但没用。任何帮助将不胜感激。我编写此代码的问题陈述是:http://www.spoj.com/problems/ONP/ EDIT1:优先级高:(),/,*, - ,+:低