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;
}
浙公网安备 33010602011771号