AC了
但是输入2a+1=-a-2;答案是a=-3.000
#include<iostream>
#include<cstdio>
#include<string>
#include<cctype>
using namespace std;
int exchange(char data) {
if (data == '0') {
return 0;
}
else if (data == '1') {
return 1;
}
else if (data == '2') {
return 2;
}
else if (data == '3') {
return 3;
}
else if (data == '4') {
return 4;
}
else if (data == '5') {
return 5;
}
else if (data == '6') {
return 6;
}
else if (data == '7') {
return 7;
}
else if (data == '8') {
return 8;
}
else if (data == '9') {
return 9;
}
}
int main(void) {
string str;
char ch = '0';
double num = 0;
double result = 0;
double pointer = 0;
bool flag[2] = { true,true };
cin >> str;
for (int i = 0; i < str.size(); ++i) {
char value = str[i];
if (isdigit(value)) {
if (flag[1]) {
num = 10 * num + exchange(value);
}
else {
num = 10 * num - exchange(value);
}
}
else if (isalpha(value)) {
ch = value;
if (flag[0]) {
if (num == 0) {
pointer += 1;
}
pointer += num;
}
else {
if (num == 0) {
pointer -= 1;
}
pointer -= num;
}
num = 0;
}
else if (value == '+') {
flag[1] = true;
if (!isalpha(str[i - 1])) {
if (flag[0]) {
result -= num;
}
else {
result += num;
}
}
num = 0;
}
else if (value == '-') {
flag[1] = false;
if (!isalpha(str[i - 1])) {
if (flag[0]) {
result -= num;
}
else {
result += num;
}
}
num = 0;
}
else if (value == '=') {
flag[1] = true;
if (!isalpha(str[i - 1])) {
if (flag[0]) {
result -= num;
}
else {
result += num;
}
}
num = 0;
flag[0] = false;
}
if (i == str.size() - 1&&isdigit(value)) {
if (!isalpha(str[i - 1])) {
if (flag[0]) {
result -= num;
}
else {
result += num;
}
}
}
}
printf("%c=%.3lf\n", ch, result / pointer);
return 0;
}