rt,这是我的代码
#include <bits/stdc++.h>
using namespace std;
signed main()
{
string s; getline(cin, s); // 有空格,用getline输入
int p1 = s.find_first_of("+-*/"); // 找到运算符的位置
int p2 = s.find_first_of("=", p1); // 找到等号的位置
// 提取运算的数
string a1 = s.substr(0, p1);
string b1 = s.substr(p1 + 1, p2 - p1 - 1);
string c1 = s.substr(p2 + 1);
// 去除空格
string a2, b2, c2;
for(auto u : a1) if(u != ' ') a2.push_back(u);
for(auto u : b1) if(u != ' ') b2.push_back(u);
for(auto u : c1) if(u != ' ') c2.push_back(u);
// 转换为数字
int a = -1, b = -1, c = -1; // 题目说输入的数不会是负数,所以可以这样初始化
if(a2[0] != '?') a = stoi(a2);
if(b2[0] != '?') b = stoi(b2);
if(c2[0] != '?') c = stoi(c2);
//* 这里必须这样写才能过,可能是虽然题面说输入只有数字、运算符、空格,但实际上掺杂了一些奇奇怪怪的字符(也可能是\r的原因?不知道……)
// 开始运算————解方程
if(a == -1){
if(s[p1] == '+'){ // x+b=c -> x=c-b
printf("%.2lf", 1.0*c - b);
}
else if(s[p1] == '-'){ // x-b=c -> x=b+c
printf("%.2lf", 1.0*b + c);
}
else if(s[p1] == '*'){ // x*b=c -> x=c/b
printf("%.2lf", 1.0*c / b);
}
else if(s[p1] == '/'){ // x/b=c -> x=b*c
printf("%.2lf", 1.0*b * c);
}
}
else if(b == -1){
if(s[p1] == '+'){ // a+x=c -> x=c-a
printf("%.2lf", 1.0*c - a);
}
else if(s[p1] == '-'){ // a-x=c -> -x=c-a -> x=a-c
printf("%.2lf", 1.0*a - c);
}
else if(s[p1] == '*'){ // a*x=c -> x=c/a
printf("%.2lf", 1.0*c / a);
}
else if(s[p1] == '/'){ //! a/x=c -> x=a/c 易错
printf("%.2lf", 1.0*a / c);
}
}
else if(c == -1){
if(s[p1] == '+'){ // a+b=x
printf("%.2lf", 1.0*a + b);
}
else if(s[p1] == '-'){ // a-b=x
printf("%.2lf", 1.0*a - b);
}
else if(s[p1] == '*'){ // a*b=x
printf("%.2lf", 1.0*a * b);
}
else if(s[p1] == '/'){ // a/b=x
printf("%.2lf", 1.0*a / b);
}
}
// printf("%.2lf", 1.0*);
return 0;
}
在判断是不是?的时候,必须要如上的写法,如果写成类似a2!="?"的形式就会RE,求大佬帮忙解释一下