题目链接:
PTA L1 -025
题意不再叙述,但这题有许多特殊情况!
特殊情况如下:
- A,B可能是超范围的数字
- A,B可能是负数
- A,B可能是小数
- A,B可能是乱码
- A可能是空串!!!(题上只说了B不为空串!)(测试点3)
最后一个点很坑!藏的很深!
AC代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
//@date: 2020-01-16 11:55:19
//@state:
int judge(string s)
{//判断该字符串是否合法,不合法返回0
if(s.find('.')!=s.npos)//小数
return 0;
if(s[0]=='-')//负数
return 0;
for(int i=0;i<(int)s.length();i++)//乱码
if(s[i]<'0'||s[i]>'9')
return 0;
int a=0;
for(int i=0;i<(int)s.length();i++)
{
a=a*10+s[i]-'0';
}
if(a<1||a>1000)//不在范围
return 0;
else return a;//合法
}
int main()
{
string s,a,b;
getline(cin,s);//因为A可能为空串,所以只能一下子读取一行了
for(int i=0;i<(int)s.length();i++)
{
if(s[i]==' ')
{//找到分界点空格
a=s.substr(0,i);//前面为A
b=s.substr(i+1,(int)s.length());//后面为B
break;
}
}
int A=judge(a);//判断A
int B=judge(b);//判断B
int flag=0;
if(A==0) {cout<<"?";flag=1;}//A不合法
else cout<<A;//A合法
cout<<" + ";
if(B==0) {cout<<"?";flag=1;}//B不合法
else cout<<B;//B合法
cout<<" = ";
if(flag) cout<<"?";
else cout<<A+B;
return 0;
}