📄 zyh.cpp
字号:
// 1. suppose we have only + , - , * , / ; and +, - will not be the first one
// 2. suppose the number is only 0,1,...,8,9 ( one digit )
// 3. suppose the expression is not very long
#pragma warning(disable:4786)
#include
#include
#include
using namespace std;
vector<char> gOperatorStack;
vector<int> gDigitStack;
vector<string> gPartialExpression;
bool isOperatorPrecedent(char op1,char op2)
{
return (op1=='*'||op1=='/'||op2=='+'||op2=='-');
}
string expressionFromExpression(string expression)
{
string digits[]={"0","1","2","3","4","5","6","7","8","9",""};
gOperatorStack.clear();
gDigitStack.clear();
gPartialExpression.clear();
gPartialExpression.assign(digits,digits+sizeof(digits)/sizeof(digits[0]));
// not using iterator, don't make beginner fear
for(int i=0;isize();++i)
{
if(expression[i]>='0'&&expression[i]<='9')
gDigitStack.push_back(expression[i]-'0');
else
{
while(gOperatorStack.size()&&isOperatorPrecedent(
gOperatorStack[gOperatorStack.size()-1],expression[i]))
{
string s;
s+=gOperatorStack[gOperatorStack.size()-1];
s+=gPartialExpression[gDigitStack[gDigitStack.size()-2]];
s+=gPartialExpression[gDigitStack[gDigitStack.size()-1]];
gPartialExpression.push_back(s);
gDigitStack.pop_back();
gDigitStack.pop_back();
gDigitStack.push_back(gPartialExpression.size()-1);
}
gOperatorStack.push_back(expression[i]);
}
}
while(gOperatorStack.size())
{
string s;
s+=gOperatorStack[gOperatorStack.size()-1];
s+=gPartialExpression[gDigitStack[gDigitStack.size()-2]];
s+=gPartialExpression[gDigitStack[gDigitStack.size()-1]];
gPartialExpression.push_back(s);
gOperatorStack.pop_back();
gDigitStack.pop_back();
gDigitStack.pop_back();
gDigitStack.push_back(gPartialExpression.size()-1);
}
return gPartialExpression[gPartialExpression.size()-1];
}
int main(int argc, char* argv[])
{
char* expressions[]=
{
"",
"1+3",
"1*2+3*4",
"1+2*3+4",
"1/3+4*2/5-6*7",
"2+4-9*3-4/6+7"
};
for(int i=0;i<sizeof(expressions)/sizeof(expressions[0]);++i)
{
cout<" "<endl;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -