做这个题目的时候WA了很多次,最终总结出了所有不被允许的方案
不被允许的案例:
1.单独整数类型。例:1
2.输入的字符串最前面的字符如果不为‘+’或‘-’。例:/1.0
3.整型或浮点类型后只接(‘e’或‘E’)或接其他字符。例:1.0e或者1.0/
4.‘e’或‘E’后面只接(‘+’或‘-’)或接其他字符。例:1.0e+或者1.0e/
5.‘+’或‘-’后面接"0-9"以外的字符串。例:1.0e+/
注意事项:
‘e’或‘E’后面的‘+’可以省略。例:1.0e10
#include<bits/stdc++.h>
using namespace std;
string s;
int p;
int is_int()
{
int flag=0;
if(s[p]>='0'&&s[p]<='9')
{
p++;
flag=1;
while(1)
{
if(s[p]>='0'&&s[p]<='9')
p++;
else
break;
}
}
return flag;
}
int is_float()
{
int flag=0;
if(is_int())
{
flag=1;
if(s[p]=='.')
{
p++;
if(is_int())
flag=2;
else
flag=0;
}
}
return flag;
}
int main()
{
int len;
while(cin>>s)
{
len = s.length();
p=0;
if(s[p]==' ')p++;
if(s[p]=='+'||s[p]=='-')p++;
int flag;
if(flag=is_float())
{
if(flag==1&&p==len)
cout<<"NO"<<endl;
else if(flag==2&&p==len)
cout<<"YES"<<endl;
else
{
if(s[p]=='e'||s[p]=='E')
{
p++;
if(s[p]=='+'||s[p]=='-')
{
p++;
}
if(is_int())
{
if(p==len)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
else
{
cout<<"NO"<<endl;
}
}
}
else
{
cout<<"NO"<<endl;
}
}
}
感谢大佬提供的思路:https://blog.youkuaiyun.com/godsight/article/details/53219109