UVA - 327 Evaluating Simple C Expressions

来源:互联网 发布:下载淘宝供销平台 编辑:程序博客网 时间:2024/06/01 07:42

题目大意:给你一系列的表达式,要求计算结果和输出表达式的字母的最后的值是多少

解题思路:用map来表示想对应的字母和值,每读取一个字母就给其赋值,然后在根据前缀和后缀的++和--进行值的改变,注意,第一次出现的字母和第二次出现的字母的值有可能不一样,比如++b-c+b,地一个b最后会变成3,但第二个b还是2,在做加法的时候b还是得用2带入,而不是3,因此b已经是最新的了,最后的答案b还是2,以前不知道,以为是3呢,结果一直W了,要记得把空格都给跳过

#include<cstdio>#include<cstring>#include<map>using namespace std;int main() {char str[1000];int num[26];for(int i = 0; i < 26; i++)num[i] = i + 1;while(gets(str)) {map<char,int>res;map<char,int>cur;int len = strlen(str);int sum = 0;for(int i = 0; i < len; i++) {if(str[i] >= 'a' && str[i] <= 'z') {res[str[i]] = num[str[i]-'a'];cur[str[i]] = num[str[i]-'a'];int j = i - 1, k = i + 1;while(j > 0 && str[j] == ' ') j--;while(k < len && str[k] == ' ') k++;if(j - 1 >= 0 && str[j] == str[j-1]) {if(str[j] == '+') {res[str[i]]++;cur[str[i]]++;}else {res[str[i]]--;cur[str[i]]--;}j = j - 2;}else if(k + 1 < len && str[k] == str[k+1]) {if(str[k] == '+')res[str[i]]++;elseres[str[i]]--;}while(str[j] == ' ' && j > 0)j--;if(j <= 0) sum = sum + cur[str[i]];else if(str[j] == '-') sum = sum - cur[str[i]];else sum = sum + cur[str[i]];}}printf("Expression: %s\n", str);printf("    value = %d\n",sum);map<char, int>::iterator it = res.begin();for(it; it != res.end();it++)printf("    %c = %d\n",it->first, it->second);}} 


0 0
原创粉丝点击