没有想到用什么类型的栈更好操作,直接用了char类型的。
思路是从缓冲区得到char之后,判断是否属于“0123456789.+-*/(”,是的话压入栈内,直到遇到")",弹出左括号之后的char组成字符串,然后专门设置一个计算string表达式的函数。
计算string表达式的函数cacl,考虑用递归做,考虑a+b+c形式,返回a+cacl(b+c),直到遇见仅有一个标点时,返回计算结果。
大佬没有没有其他思路的
#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
string caclStr(const string&);
void printStack(const stack<char>&);
float calcDou(const float, const float, const char&);
string delLastZero(const string& s)
{
string stmp(s);
for (auto b = stmp.rbegin(); b != stmp.rend() && *b == '0'; b = stmp.rbegin())
stmp.pop_back();
if (stmp.back())
stmp.pop_back();
return stmp;
}
string reOderStr(const string&s)
{
string str(s.size(), ' ');
auto bstr=str.rbegin();
for (auto b = s.be