UVA327 - Evaluating Simple C Expressions
题目很简单,不过需要考虑全面才可、
个人觉得题目表达的不是很准确,其中没有考虑到a与--之间有空格的情况就是我第一次RTE的原因所在】
因此,我先进行空格剔除,在进行其他操作。
代码如下:
#include <iostream> #include <string> #include <cstring> using namespace std; int ch[30], sum, length; string s; int cacultor(int a, char c, int b)//计算函数 { switch (c) { case '+': return a+b; case '-': return a-b; } return 0; } int ZIJIAJIAN(int i, int j)//判断是否符合自增自减条件 { if(i<=length-2&&s[i] == s[i+1]) { ch[s[j]-'a'] = (ch[s[j]-'a']>=0?ch[s[j]-'a']:s[j]-'a'+1); switch(s[i+1]) { case '+': { ch[s[j]-'a']++; break; } case '-': { ch[s[j]-'a']--; break; } } return 1; } return 0; } int move(int i)//剔除空格 { for(int j = i; j < length-1; j++) s[j] = s[j+1]; length--; return 0; } int main () { while(getline(cin, s)) { cout<<"Expression: "<<s<<endl; memset(ch,-1,sizeof(ch)); sum = 0; length = s.length(); for(int i = 0; i < length; i++) if(s[i]==' '){move(i); i = -1;} for(int i = 0, count = 0; i < length; i++) { count++; if(count == 1||(s[i]>='a'&&s[i]<='z')) { int temp = 2; temp = (ZIJIAJIAN(i,i+temp)?2:(ch[s[i]-'a'] = (ch[s[i]-'a']>=0?ch[s[i]-'a']:s[i]-'a'+1),0)); sum+=ch[s[i+temp]-'a']; i+=temp; i+=(ZIJIAJIAN(i+1,i)?2:0); } else { int temp = 1, temp2 = 2; temp2 = (ZIJIAJIAN(i+temp, i+temp+temp2)?2:( ch[s[i+temp]-'a'] = (ch[s[i+temp]-'a']>=0?ch[s[i+temp]-'a']:s[i+temp]-'a'+1), 0)); sum = cacultor(sum, s[i], ch[s[i+temp+temp2]-'a']); i+=(temp+temp2); i+=(ZIJIAJIAN(i+1,i)?2:0); } } cout<<" value = "<<sum<<endl; for(int i = 0; i < 26;i++) if(ch[i]>=0)cout<<" "<<char('a'+i)<<" = "<<ch[i]<<endl; } return 0; }