UVA_327_Evaluating Simple C Expressions
2016-04-20 16:35
417 查看
#include<iostream> #include<sstream> #include<string> #include<vector> #include<list> #include<set> #include<map> #include<stack> #include<queue> #include<algorithm> #include<bitset> #pragma warning(disable:4996) using std::cin; using std::cout; using std::endl; using std::stringstream; using std::string; using std::vector; using std::list; using std::pair; using std::set; using std::multiset; using std::map; using std::multimap; using std::stack; using std::queue; using std::priority_queue; using std::bitset; void evaluate(const string &str) { map<char, int>char_val; char Operator = '+'; int sum = 0; for (size_t i = 0; i < str.size();) { if (str.size() - i >= 3) { if (str[i] == '+'&&str[i + 1] == '+'&&isalpha(str[i + 2])) { if (Operator == '+') { sum += str[i+2] - 'a' + 2; } else { sum -= str[i+2] - 'a' + 2; } char_val.insert({ str[i+2],str[i+2]-'a' + 2 }); } else if (str[i] == '-'&&str[i + 1] == '-'&&isalpha(str[i + 2])) { if (Operator == '+') { sum += str[i+2] - 'a'; } else { sum -= str[i+2] - 'a'; } char_val.insert({ str[i+2],str[i+2] - 'a' }); } else if (isalpha(str[i]) && str[i + 1] == '+'&&str[i + 2] == '+') { if (Operator == '+') { sum += str[i] - 'a' + 1; } else { sum -= str[i] - 'a' + 1; } char_val.insert({ str[i],str[i] - 'a' + 2 }); } else if (isalpha(str[i]) && str[i + 1] == '-'&&str[i + 2] == '-') { if (Operator == '+') { sum += str[i] - 'a' + 1; } else { sum -= str[i] - 'a' + 1; } char_val.insert({ str[i],str[i] - 'a' }); } else { goto sign; } i += 3; } else { sign: if (isalpha(str[i])) { if (Operator == '+') { sum += str[i] - 'a' + 1; } else { sum -= str[i] - 'a' + 1; } char_val.insert({str[i],str[i]-'a'+1}); } else { Operator = str[i]; } i++; } } cout << " value = " << sum << endl; for (auto iter = char_val.begin(); iter != char_val.end(); iter++) { cout << " " << iter->first << " = " << iter->second << endl; } } string clear_space(const string &str) { string ret; for (size_t i = 0; i < str.size(); i++) { if (!isspace(str[i])) { ret.push_back(str[i]); } } return ret; } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); string expression; while (getline(cin, expression)) { cout << "Expression: " << expression << endl; expression = clear_space(expression); evaluate(expression); } return 0; }
相关文章推荐
- VS 2013 编译 Lua 5.3
- 字符估值器CharEvaluator
- Notepad++中调试用心lua程序
- Lua从入门到放弃--打印表Demo
- Lua中的操作系统库
- Lua从入门到放弃--元表(操作符)
- 浅析 Android 动画:自定义 Interpolator 与 TypeEvaluator
- Lua从入门到放弃--元表
- Lua math库
- lua C++对象内存管理
- Lua根据秒数返回时间串00:00:00
- Thrift lua example
- Lua学习笔记
- Lua函数[转]
- Lua与C++ 交互
- 自定义lua输出
- lua 函数库汇总
- lua面向对象与基于lua的状态机实现
- aodh M版本新特性 - queue between alarm evaluator and alarm notifier
- lua中的pairs和ipairs差别