#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <sstream>
void ToReverse(std::vector<std::string> &strVecIn, std::vector<std::string> &reverseStrVec)
{
//中缀式转后缀式
std::stack<std::string> strStack;
for(std::vector<std::string>::iterator it = strVecIn.begin();
it != strVecIn.end(); ++it)
{
if("(" == *it)
{
strStack.push(*it);
}
else if(")" == *it)
{
while(!strStack.empty() && strStack.top() != "(")
{
reverseStrVec.push_back(strStack.top());
strStack.pop();
}
strStack.pop();
}
else if("*" == *it || "/" == *it)
{
strStack.push(*it);
}
else if("+" == *it || "-" == *it)
{
while(!strStack.empty() && strStack.top() != "(")
{
reverseStrVec.push_back(strStack.top());
strStack.pop();
}
strStack.push(*it);
}
else
{
reverseStrVec.push_back(*it);
}
}
while(!strStack.empty())
{
reverseStrVec.push_back(strStack.top());
strStack.pop();
}
}
int GetRet(std::vector<std::string> &reverseStrVec)
{
//利用栈对后缀式就结果
std::stack<std::string> strStack;
std::stringstream ss;
int ret = 0;
for(std::vector<std::string>::iterator it = reverseStrVec.begin();
it != reverseStrVec.end(); ++it)
{
if("+" == *it || "-" == *it || "*" == *it || "/" == *it)
{
std::string str1 = "", str2 = "";
int a1 = 0, a2 = 0;
str1 = strStack.top();
strStack.pop();
str2 = strStack.top();
strStack.pop();
ss.clear();
ss.str(str1);
ss >> a1;
ss.clear();
ss.str(str2);
ss >> a2;
switch (it->front())
{
case '+':
{
ret = a2 + a1;
break;
}
case '-':
{
ret = a2 - a1;
break;
}
case '*':
{
ret = a2 * a1;
break;
}
case '/':
{
if(0 == a1)
{
std::cout << "除数是0!" << std::endl;
exit;
}
ret = a2 / a1;
break;
}
default:
std::cout << "error" << std::endl;
exit;
}
ss.clear();
ss.str("");
ss << ret;
strStack.push(ss.str());
ret = 0;
}
else
{
strStack.push(*it);
}
}
ss.clear();
ss.str(strStack.top());
ss >> ret;
return ret;
}
int main()
{
//使用逆波兰式来进行四则表达式运算
std::vector<std::string> reverseStrVec;
std::vector<std::string> strVecIn;
strVecIn.push_back("9");
strVecIn.push_back("+");
strVecIn.push_back("(");
strVecIn.push_back("3");
strVecIn.push_back("-");
strVecIn.push_back("1");
strVecIn.push_back("+");
strVecIn.push_back("5");
strVecIn.push_back(")");
strVecIn.push_back("*");
strVecIn.push_back("3");
strVecIn.push_back("+");
strVecIn.push_back("10");
strVecIn.push_back("/");
strVecIn.push_back("2");
ToReverse(strVecIn, reverseStrVec);
std::cout << GetRet(reverseStrVec) << std::endl;
system("pause");
return 0;
}
#include <vector>
#include <string>
#include <stack>
#include <sstream>
void ToReverse(std::vector<std::string> &strVecIn, std::vector<std::string> &reverseStrVec)
{
//中缀式转后缀式
std::stack<std::string> strStack;
for(std::vector<std::string>::iterator it = strVecIn.begin();
it != strVecIn.end(); ++it)
{
if("(" == *it)
{
strStack.push(*it);
}
else if(")" == *it)
{
while(!strStack.empty() && strStack.top() != "(")
{
reverseStrVec.push_back(strStack.top());
strStack.pop();
}
strStack.pop();
}
else if("*" == *it || "/" == *it)
{
strStack.push(*it);
}
else if("+" == *it || "-" == *it)
{
while(!strStack.empty() && strStack.top() != "(")
{
reverseStrVec.push_back(strStack.top());
strStack.pop();
}
strStack.push(*it);
}
else
{
reverseStrVec.push_back(*it);
}
}
while(!strStack.empty())
{
reverseStrVec.push_back(strStack.top());
strStack.pop();
}
}
int GetRet(std::vector<std::string> &reverseStrVec)
{
//利用栈对后缀式就结果
std::stack<std::string> strStack;
std::stringstream ss;
int ret = 0;
for(std::vector<std::string>::iterator it = reverseStrVec.begin();
it != reverseStrVec.end(); ++it)
{
if("+" == *it || "-" == *it || "*" == *it || "/" == *it)
{
std::string str1 = "", str2 = "";
int a1 = 0, a2 = 0;
str1 = strStack.top();
strStack.pop();
str2 = strStack.top();
strStack.pop();
ss.clear();
ss.str(str1);
ss >> a1;
ss.clear();
ss.str(str2);
ss >> a2;
switch (it->front())
{
case '+':
{
ret = a2 + a1;
break;
}
case '-':
{
ret = a2 - a1;
break;
}
case '*':
{
ret = a2 * a1;
break;
}
case '/':
{
if(0 == a1)
{
std::cout << "除数是0!" << std::endl;
exit;
}
ret = a2 / a1;
break;
}
default:
std::cout << "error" << std::endl;
exit;
}
ss.clear();
ss.str("");
ss << ret;
strStack.push(ss.str());
ret = 0;
}
else
{
strStack.push(*it);
}
}
ss.clear();
ss.str(strStack.top());
ss >> ret;
return ret;
}
int main()
{
//使用逆波兰式来进行四则表达式运算
std::vector<std::string> reverseStrVec;
std::vector<std::string> strVecIn;
strVecIn.push_back("9");
strVecIn.push_back("+");
strVecIn.push_back("(");
strVecIn.push_back("3");
strVecIn.push_back("-");
strVecIn.push_back("1");
strVecIn.push_back("+");
strVecIn.push_back("5");
strVecIn.push_back(")");
strVecIn.push_back("*");
strVecIn.push_back("3");
strVecIn.push_back("+");
strVecIn.push_back("10");
strVecIn.push_back("/");
strVecIn.push_back("2");
ToReverse(strVecIn, reverseStrVec);
std::cout << GetRet(reverseStrVec) << std::endl;
system("pause");
return 0;
}