UVa 327 - Evaluating Simple C Expressions解题报告
来源:互联网 发布:网络英语哪个机构最好 编辑:程序博客网 时间:2024/06/14 13:59
题意:模拟计算--,++的计算式
思路:利用stl可以很简单的实现,代码也很清晰明了。首先是利用string类输入数据并清除空格,然后对式子进行扫描,以三个位单位,发现符合x++,x--,--x,++x的情况就对值进行改变,并替换。而对于字母与数字的关系,利用map映照容器建立映射,由于前置和后置对于计算是有不同影响的。使用value存储字母的最终值,用copyvalue存储计算时的字母值,分开存储,输出结果也分开输出,这样思路很直观。
//327 - Evaluating Simple C Expressions#include <iostream>#include <string>#include <map>#include <cctype>#include <queue>#include <algorithm>using namespace std;char check(string &, map<char, int> &, map<char, int> &, int);int main(){//freopen("data.txt", "r", stdin);string expression, copy;while (getline(cin, expression, '\n')){cout << "Expression: " << expression << endl;for(int i = 0; i < expression.length(); i++)//预处理,除去所有空格if(expression[i] == ' ')expression.erase(i--, 1);map<char, int> value, CopyValue;//value存储最终每个字母的值,CopyValue存储参与计算式字母的值for(int i = 0; i < 26; i++)//建立字母与数字的映射value['a' + i] = i + 1;CopyValue = value;//建立副本,for(int i = 0; i + 2 < expression.length(); i++)//到字符最后第三位即可{char c = check(expression, value, CopyValue, i);//逐次扫描3个连续字符,返回被改变的字母if(c != 0)expression.replace(i, 3, 1, c);}int sum = CopyValue[expression[0]];for(int i = 1; i + 1 < expression.length(); i++){char o = expression[i], x = expression[i + 1];if(o == '+')sum += CopyValue[x];elsesum -= CopyValue[x];}printf(" value = %d\n", sum);sort(expression.begin(), expression.end());for(int i = 0; i < expression.length(); i++)if(isalpha(expression[i]))printf(" %c = %d\n", expression[i], value[expression[i]]);}}char check(string &s, map<char, int> &v, map<char, int> &cv,int i){if(isalpha(s[i]) && s[i + 1] == '+' && s[i + 2] == '+')//判断x++{v[s[i]]++;return s[i];}else if(isalpha(s[i]) && s[i + 1] == '-' && s[i + 2] == '-')//判断x--{v[s[i]]--;return s[i];}else if(isalpha(s[i + 2]) && s[i + 1] == '+' && s[i] == '+')//判断++x,前置式对计算结果有影响,所以对于副本值也要改变{v[s[i + 2]]++;cv[s[i + 2]]++;return s[i + 2];}else if(isalpha(s[i + 2]) && s[i + 1] == '-' && s[i] == '-')//判断--x,前置式对计算结果有影响,所以对于副本值也要改变{v[s[i + 2]]--;cv[s[i + 2]]--;return s[i + 2];}elsereturn 0;}
0 0
- UVa 327 - Evaluating Simple C Expressions解题报告
- UVa 327 Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions
- uva 327 - Evaluating Simple C Expressions
- uva 327 - Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions
- uva 327 - Evaluating Simple C Expressions
- uva 327 Evaluating Simple C Expressions
- 数据结构 uva-327-Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions
- uva 327--Evaluating Simple C Expressions
- uva 327 Evaluating Simple C Expressions
- UVa 327 Evaluating Simple C Expressions (模拟)
- uva 327 - Evaluating Simple C Expressions
- uva 327 - Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions
- UVA 327 Evaluating Simple C Expressions
- UVA - 327 Evaluating Simple C Expressions
- Java入门
- js压缩混淆加密工具,解密工具
- 白话经典算法系列之六 快速排序 快速搞定
- 直接点出主题常用句型(Email)
- USACO Section 3.3 Home on the Range
- UVa 327 - Evaluating Simple C Expressions解题报告
- Java Swing使用注解绑定事件监听
- hdu1874 畅通工程续(Dijkstra)
- Android游戏开发 Unity3D基础
- 九度OJ 1366 栈的压入、弹出序列 【数据结构】
- 注解和xml
- IO——过滤文件夹
- 栈和队列
- 牡丹苑里的口哨声