資源簡介
一個簡單的后綴表達式求解問題
代碼片段和文件信息
/*************************************************************************
>?File?Name:?expression.cpp
>?Author:?
>?Mail:?
>?Created?Time:?Mon?05?Jun?2017?09:59:48?PM?EDT
?************************************************************************/
#include
#include?
#include?
#include?
using?namespace?std;
int?Level(?string?sOper?)
{
????char?sDta?=?sOper[0];
????switch?(?sDta?)
????{
????????case?‘+‘:
????????case?‘-‘:
????????return?0;
????????case?‘*‘:
????????case?‘/‘:
????????return?1;
????????case?‘(‘:
????????return?-1;
????????case?‘)‘:
????????return?9;
????????default:
????????return?-100;
????}
}
bool?IsOperator(?char?cDta?)
{
????switch?(cDta)
????{
????????case?‘(‘:
????????case?‘)‘:
????????case?‘+‘:
????????case?‘-‘:
????????case?‘*‘:
????????case?‘/‘:
????????return?true;
????????
????????default:
????????return?false;
????}
}
void?AddStackTopDta(?vector&?vcDta?const?stack&?stackDta?)
{
????string?sDta?=?stackDta.top();
????if(?sDta?!=?“)“?&&?sDta?!=?“(“?)
????{
????????vcDta.push_back(?sDta?);
????}
}
vector?Getexpression(?string?sExp?)
{
????stack?stackOper;
????vector?vcDta;
????int?iPos?=?0;
????bool?bPop?=?false;
????for(?int?i?=?0;?i?????{
???????if(?IsOperator(?sExp[i]?)?)
????????{
????????????if(?i?>?iPos??)
????????????{
????????????????if(?i?>?iPos?)
????????????????{
????????????????????string?sCur?=?sExp.substr(?iPos?i?-?iPos?);
????????????????????vcDta.push_back(?sCur?);
????????????????}
????????????????if(?bPop??)
????????????????{
????????????????????if(?!stackOper.empty()?)
????????????????????{
????????????????????????AddStackTopDta(vcDta?stackOper);
????????????????????????stackOper.pop();
????????????????????????if(?!stackOper.empty()?)
????????????????????????{
????????????????????????????AddStackTopDta(vcDta?stackOper);
????????????????????????????stackOper.pop();
????????????????????????}
????????????????????????bPop?=?false;
????????????????????}
????????????????}
????????????}
????????????iPos?=?i?+?1;
????????????string?sCurOper?=?sExp.substr(i?1);
????????????if(?sCurOper?==?“)“?)
????????????{
????????????????while(?!stackOper.empty()?)
????????????????{
????????????????????string?sTop?=?st
評論
共有 條評論