思路
只需要统计一下字母的系数和非字母的系数,注意整个式子的最前面出现符号的情况,模拟一下。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char ch[500], word;
int i, op, num1, num2;
bool ok;
bool is;
int main(){
scanf("%s", ch+1);
int len = strlen(ch+1);
for(i = 1; i <= len; i ++){
if(ch[i] <= 'z' && ch[i] >= 'a'){
word = ch[i];
break;
}
}
ch[len+1] = '+';
int num = 0;
op = 1, i = 1;
if(ch[i] == '-'){
op = -1;
i ++;
}
for(; ; i ++){
char c = ch[i];
if(c <= '9' && c >= '0'){
num = num * 10 + c-'0';
}else if(c == '+' || c == '-'|| c == '='){
if(is){
is = 0;
if(num == 0) num ++;
num2 += (num*op);
}else{
num1 += (num*op);
}
num = 0;
if(c == '-') op = -1;
else if(c == '+') op = 1;
else if(c == '=') break;
}else is = 1;
}
op = 1;
if(ch[++i] == '-'){
op = -1;
i ++;
}
for(; i <= len+1; i ++){
char c = ch[i];
if(c <= '9' && c >= '0'){
num = num * 10 + c-'0';
}else if(c == '+' || c == '-'|| c == '='){
if(is){
is = 0;
if(num == 0) num ++;
num2 += (num*op*-1);
}else{
num1 += (num*op*-1);
}
num = 0;
if(c == '-') op = -1;
else if(c == '+') op = 1;
else if(c == '=') break;
}else is = 1;
}
printf("%c=%.3f", word, (double)num1/(double)num2*-1);
return 0;
}
我承认完全没有可读性,多写点会好的。