POJ-1539(表达式求值)
2014-08-15 21:52
274 查看
题目:http://poj.org/problem?id=1539
#include <cctype> #include <string> #include <iostream> using namespace std; int value[26]; char used[26], post[26]; void preEval(string& exp) { int i = 0, len = exp.size(); for(int k = 0; k < len; ++k){ if(!isspace(exp[k])) exp[i++] = exp[k]; } exp.resize(len = i); for(i = 0; i < 26; ++i){ used[i] = 0; value[i] = i + 1; post[i] = 0; } for(i = 0; i < len; ++i){ if(isalpha(exp[i])) used[exp[i] - 'a'] = 1; } for(i = 0; i < len && (i = exp.find("++", i)) != string::npos; ){ if(i + 2 < len && isalpha(exp[i+2])) ++value[exp[i+2] - 'a']; else post[exp[i-1] - 'a'] = 1; exp = exp.substr(0, i) + exp.substr(i + 2); } for(i = 0; i < len && (i = exp.find("--", i)) != string::npos; ){ if(i + 2 < len && isalpha(exp[i+2])) --value[exp[i+2] - 'a']; else post[exp[i-1] - 'a'] = -1; exp = exp.substr(0, i) + exp.substr(i + 2); } // cout << "exp = " << exp << "\n"; } int eval(const string& exp, int res = 0) { if(exp.empty()) return res; int i = 0; bool add = true; if(!isalpha(exp[i])){ add = exp[i] == '+'; ++i; } if(add) res += value[exp[i] - 'a']; else res -= value[exp[i] - 'a']; return eval(exp.substr(i+1), res); } void postEval() { for(int i = 0; i < 26; ++i){ if(used[i]) cout << " " << char('a' + i) << " = " << value[i] + post[i] << "\n"; } } int main() { ios::sync_with_stdio(false); string exp; while(getline(cin, exp)){ cout << "Expression: " << exp << "\n"; preEval(exp); cout << " " << "value = " << eval(exp) << "\n"; postEval(); } return 0; }
相关文章推荐
- poj 1686 Lazy Math Instructor(表达式求值)
- poj 2106 Boolean Expressions(特殊的表达式求值)
- POJ-3337 Expression Evaluator-表达式求值
- (栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)
- Poj2269 Friends (表达式求值)
- (栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)
- poj 1686 表达式求值判断
- POJ 2106-Boolean Expressions,双栈运用类似表达式求值!
- poj 2269 Friends(表达式求值)
- POJ - 1539 Evaluating Simple C Expressions(简单的C表达式)
- poj 2106 Boolean Expressions(字符串bool表达式求值)
- NYOJ1272 表达式求值(后缀求值,特殊处理)(河南省第九届ACM省赛)
- NYOJ-305 表达式求值【栈】
- 表达式求值 nyoj
- 表达式求值(栈实现)
- 用静态栈数据结构实现表达式求值
- 表达式求值
- 计算器制作JAVA版(第三步,表达式求值(+-*/)混入点号和负号)
- 表达式求值调试完成
- 【算法】E.W.Dijkstra算术表达式求值