本来觉得这道题还好,写完之后提交的时候,简直WA到哭TT,各种情况没有考虑到,这里要提醒大家的是,这道题的表达式输入时会有空格,所以要对输入的表达式进行处理,去掉其中的空格,but。。!!最后输出的表达式必须是原始的表达式,也就是没有去掉空格之前的表达式,伤不起。
第一次写博客,因为最近一直要准备保研的复试,所以一直在刷题,所以写这个博客不仅是拯救一直WA的小伙伴,还要为自己赞一下人品啦~~~
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int main(){
int v[27];
int cur[27];
int value;
int n;
char str[10000];
char str1[10000];
char temp[5];
int b;
//while(scanf("%d", &n)!=EOF){
scanf("%d", &n);
getchar();
while(n--){
gets(str1);
int len = 0;
for(int i=0; i<strlen(str1); i++){
if(str1[i]!=' ')
str[len++] = str1[i];
}
for(int i=0; i<26; i++){
v[i] = i+1;
cur[i] = 0;
}
int k=0;
value = 0;
b = 1;
while(k<len){
if(str[k]=='+' || str[k]=='-'){
if(str[k]=='+' && str[k+1]=='+'){
k += 2;
v[str[k]-'a'] += 1;
}
else if(str[k]=='-' && str[k+1]=='-'){
k += 2;
v[str[k]-'a'] -= 1;
}
else{
b = (str[k]=='+'?1:-1);
k++;
}
}
else if(isalpha(str[k])){
cur[str[k]-'a'] = 1;
value += b*v[str[k]-'a'];
if(str[k+1]=='+' && str[k+2]=='+'){
v[str[k]-'a'] += 1;
k += 2;
}
else if(str[k+1]=='-' && str[k+2]=='-'){
v[str[k]-'a'] -= 1;
k += 2;
}
else
k++;
}
}
printf("Expression: ");
for(int i=0; i<strlen(str1); i++)
printf("%c", str1[i]);
printf("\n");
printf("value = %d\n", value);
for(int i=0; i<26; i++){
if(cur[i]){
printf("%c = %d\n", i+'a', v[i]);
}
}
}
//}
return 0;
}