这个题有个很大的坑,
用printf会wa
蹊跷。。。。。
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
string str;
int n;
cin>>n;
cin.ignore();
bool book[26];
int v[26];
while(n--)
{
getline(cin,str);
cout<<"Expression: "<<str<<endl;
int sum=0;
memset(book,false,sizeof(book));
for(int i=0;i<26;i++)
v[i]=i+1;
for(int i=0;str[i];i++)
{
if(str[i]==' ')
{
for(int k=i;str[k];k++)
str[k]=str[k+1];
i--;
}
}
int flag=1;
for(int i=0;str[i];i++)
{
if(str[i]=='+'||str[i]=='-')
{
if(((str[i]=='+'&&str[i+1]=='+')||(str[i]=='-'&&str[i+1]=='-'))&&isalpha(str[i+2]))
{
v[str[i+2]-'a']+=(str[i]=='+'?1:-1);
i++;
book[str[i+1]-'a']=true;
}
else
flag=(str[i]=='+'?1:-1);
}
else if(isalpha(str[i]))
{
sum+=flag*v[str[i]-'a'];
book[str[i]-'a']=true;
if((str[i+1]=='+'&&str[i+2]=='+')||(str[i+1]=='-'&&str[i+2]=='-'))
{
v[str[i]-'a']+=(str[i+1]=='+'?1:-1);
i+=2;
}
}
}
cout<<"value = "<<sum<<endl;
for(int i=0;i<26;i++)
if(book[i])
cout<<(char)('a'+i)<<" = "<<v[i]<<endl;
}
return 0;
}
/*
2
a + b
c+f -- + -- a
*/