uva 327
来源:互联网 发布:c语言socket的用法 编辑:程序博客网 时间:2024/06/06 03:39
题意:计算结果,注意有二目运算符,并输出每个字符的值
#include <iostream>#include <cstdio>#include <cstring>#include <deque>#include <vector>#include <algorithm>using namespace std;const int MAXN = 130;vector<char>var;deque<int>que;char str[MAXN];int val[26];void Filter() //去掉空格{int pos = 0;for (int i = 0 ; i < strlen(str) ; i++)if (str[i] != ' ')str[pos++] = str[i];str[pos] = '\0';}bool havePrefix(int i) //前++,--{ if ((str[i-1]=='+' && str[i-2] == '+') ||( str[i-1]=='-' && str[i-2]=='-'))return true; return false;}bool haveSuffix(int i) //后++,--{if ((str[i+1]=='+' && str[i+2] == '+') ||( str[i+1]=='-' && str[i+2]=='-'))return true;return false;}void PreProssess() //去掉二目运算符,并储存字符值{while (!que.empty())que.pop_back();var.clear();for (int i = 0 ; i < strlen(str) ; i++){if (str[i] >= 'a' && str[i] <= 'z'){var.push_back(str[i]);if (i >= 2 && havePrefix(i)){if (str[i-1] == '+')val[str[i] - 'a']++;else val[str[i] - 'a']--;int n = val[str[i]-'a'];que.push_back(n);str[i-1] = str[i-2] = ' ';}else if (i <= strlen(str)-3 && haveSuffix(i)){int n = val[str[i] - 'a'];que.push_back(n);if (str[i+1] == '+')val[str[i] - 'a']++;elseval[str[i] - 'a']--;str[i+1] = str[i+2] = ' ';}else {int n = val[str[i] - 'a'];que.push_back(n);}}}}int getsum(){for (int i = 0 ; i < strlen(str) ; i++){if (str[i] == '+' || str[i] == '-'){int a = que.front();que.pop_front();int b = que.front();que.pop_front();if(str[i] == '+')que.push_front(a+b);else que.push_front(a-b);}}return que.front();}void solve(){for (int i = 0 ; i < 26 ; i++)val[i] = i+1;Filter();PreProssess();int sum = getsum();printf(" value = %d\n",sum);sort(var.begin(),var.begin()+var.size());for (int i = 0 ; i < var.size() ; i++)printf(" %c = %d\n",var[i],val[var[i]-'a']);}int main(){while (gets(str)){printf("Expression: %s\n",str);solve();}return 0;}
- uva 327
- uva 327
- uva 327
- uva 327
- uva 327
- UVA 327
- uva 327(字符串)
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 计数排序算法!线性时间复杂度!
- KMP字符串模式匹配详解 .
- cannot find -lclntsh的解决
- MAP的使用图片局部点击功能
- 获取不支持重定向的Console程序的输出【原创】
- uva 327
- Java各种数据类型详细介绍及其区别
- android 表格控件
- 音频视频解决方案:GStreamer-ffmpeg-ffdshow-directshow-vfw
- Box2d,物理引擎
- MSVCRT.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in functi
- 更换服务器如何重装U-Mail邮件服务器软件
- SICP 习题 (1.8) 解题总结:牛顿法求立方根
- U盘的驱动