#include #include #include #include #include using namespace std; /* int parse(string input) { while(input.find('(')!=string::npos) { int start; int len; start = input.find('('); stack brackets; brackets.push('('); for(int i=start+1;i split_to_lexems(string input) { queue series; string lex; int dgt=0,opr=0,min=0;; for(int i=0;i1 && lex[0]=='-') { min=1; lex.erase(0,1); l.lex=lex; series.push(l); } else if (lex.length()>1 && lex[lex.length()-1]=='-') { min=1; lex.erase(lex.length()-1,1); l.lex=lex; series.push(l); } else { l.lex = lex; series.push(l); } lex.clear(); i-=1; } else { lex+=input[i]; } } } if (lex.length()) { lexem l; l.lex = lex; if (dgt) { l.type="number"; if (min) l.lex="-"+l.lex; } else if(opr) l.type="operation"; else l.type="bracket"; series.push(l); } return series; } queue to_postfix(queue series)//string input) { map prior; prior["+"]=0; prior["-"]=0; prior["*"]=1; prior["/"]=1; prior["^"]=2; //queue series = split_to_lexems(input); queue output; stack stk; while(series.size()) { if (series.front().type=="number") { output.push(series.front()); series.pop(); } else if (series.front().type=="bracket") { if (series.front().lex=="(") { stk.push(series.front()); series.pop(); } else if (series.front().lex==")") { while (!(stk.top().type=="bracket")) { output.push(stk.top()); stk.pop(); } stk.pop(); //if (stk.top().lex=="(") {cout << stk.size() << endl; stk.pop(); } //stk.pop(); //if(!stk.empty()) stk.pop(); series.pop(); } } else if (series.front().type=="operation") { while (!stk.empty() && prior[stk.top().lex]>=prior[series.front().lex] && stk.top().type=="operation") { output.push(stk.top()); stk.pop(); } stk.push(series.front()); series.pop(); } else series.pop(); } while (!stk.empty()) { output.push(stk.top()); stk.pop(); } return output;/* while (!output.empty()) { cout << output.front().lex << " "; output.pop(); } cout << endl; return series.size();*/ } int calc(string input) { queue series = to_postfix(split_to_lexems(input)); return 1; } /* int count(string input) { map priority; priority["+"]=0; priority["-"]=0; priority["*"]=1; priority["/"]=1; stack operands; stack operations; int pos = 0; while (pos