/*
P1689 题解
字符串的使用+状态判断
*/
#include <cstdio>//头文件
#include <cstring>//头文件
char st[101];//st数组是一个字符类型的数组(可以用来存储字符串),接下来我们将用它来存储这个方程
int main()//主函数
{
int a=-1,b=-1,flag=-1,js=-2,wz=-2;//定义变量,a表示这个方程当中的第一个已知数,而b则是表示这个方程当中的第二个已知数,flag表示的是当前已经读完了多少个已知数,当flag=-1时表示没有读入任何一个或者已经读入到了一个,而在flag=0的时候则表示当前读入到了第二个已知数,请想一想,为什么在flag=0的时候可以表示两种状态,js表示的是这个算式当中使用了加法运算(即js=-1时)还是减法运算(即flag=0时),wz表示的是这个位置数在什么位置,如果wz=-1,那么就表明这个未知数在最左边,否则,当wz=0时,就表明这个未知数在中间,如果这个未知数在最右边的话,那么就可以根据js、a和b求出答案(因为有了这两个已知数就可以解这个方程了)
gets(st+1);//读入这个字符串(因为读入的方程可能会有空格),所以不能够用scanf,要用gets
int len=strlen(st+1);//len是用来存这个字符串的长度的
for(int i=1;i<=len;i++)//从1到len进行循环,即遍历这个字符串
{
if(st[i]==' ')//如果这一位是空格(因为空格时多余的,所以要直接地进入到下一位)
{
continue;//直接进行下一次的循环
}
if(st[i]>='0' && st[i]<='9')//如果这一位是数字
{
if(flag==-1)//如果这是这个方程中的第一个未知数
{
a=0;//先把这个数给清零
while(1)//一直循环(即死循环)
{
if(st[i]==' ')//如果这是一个多余的空格(因为在数字中间有可能有空格,所以要在这里也要加一个判断,例如:12 345这样)
{
i++;//那么就直接将i加1
}
else if(st[i]>='0' && st[i]<='9')//否则,如果这一位上是数字
{
a=a*10+st[i]-'0';//加上去(例如a=12,这一位上是'3',那么12乘以10之后就是120,再加上数字3,即'3'-'0',就可以的到123了)
i++;//继续去下一位
}
else//如果这一位上既不是空格又不是数字,那么就表示这个数字读入完了
{
break;//跳出这个循环
}
}
flag=0;//改变flag的值,表示第一个给出的数(即已知数)已经读入完了
}
else if(flag==0)//如果第一个数读入完了
{
b=0;//那么就去读入第尔个数,然后给b初始化为0
while(1)//一直循环
{
if(st[i]==' ')//去除掉多余的空格
{
i++;//继续去下一位
}
else if(st[i]>='0' && st[i]<='9')//如果这一位上是数字
{
b=b*10+st[i]-'0';//加上去
i++;//继续去这个字符串的下一位找
}
else//如果读入完了
{
break;//跳出这个循环
}
}
}
}
if(st[i]=='+')//如果这个方程中用到了加法运算
{
js=-1;//那么就改js的值为-1
}
else if(st[i]=='-')//否则如果这个方程中用到了减法运算
{
js=0;//否则就将js的值改为0
}
if(st[i]=='?')//如果这一位上是要求的未知数
{
if(a==-1 && b==-1)//如果这个未知数在左边
{
wz=-1;//那么就将wz的值改为-1
}
else if(a!=-1 && b==-1)//否则如果这个未知数在中间
{
wz=0;//那么就将wz的值改为0
}
else if(a!=-1 && b!=-1)//否则如果这个未知数在右边
{
if(js==-1)//如果在这个方程中用到了加法运算
{
printf("%d",a+b);//输出答案
}
else if(js==0)//否则如果在这个方程中用到了减法运算
{
printf("%d",b-a);//输出答案
}
return 0;//结束程序(因为已经把答案输出了)
}
}
}
if(wz==-1)//如果这个未知数在左边
{
if(js==-1)//如果在这个方程中用到了加法运算
{
printf("%d",b-a);//输出答案
}
else if(js==0)//否则如果在这个方程中用到了减法运算
{
printf("%d",a+b);//输出答案
}
}
else if(wz==0)//否则如果这个未知数在中间
{
if(js==-1)//如果在这个方程中用到了加法运算
{
printf("%d",b-a);//输出答案
}
else if(js==0)//否则如果在这个方程中用到了减法运算
{
printf("%d",a-b);//输出答案
}
}
return 0;//结束程序
}