解题思路就是列出所有no的情况,样例输出是对的,但提交后判错,是有什么情况没有考虑到吗,求指教
你这代码,,,说实话我真没看懂,我给写个吧,记住,正则表达式是个好东西!
正则表达式的优点就是,你需要考虑Yes的情况而非No的情况,不会造成考虑不周的现象,因为题目通常会告诉你什么样的合法,而不是什么样的不合法。
#include<iostream>
#include<regex>
int main()
{
std::string str;
while(std::cin >> str)
{
std::cout << (std::regex_match(str, std::regex("(\\+|-)?(0|([1-9](\\d{0,9}|\\d{0,18}(l|L))))")) ? "Yes" : "No");
}
return 0;
}
#include
#include
using namespace std;
int main()
{
char c[100];
while(cin>>c)
{
int len=strlen(c),flag=1;
for(int i=0;i<len;i++)
{
if((c[0]=='+'||c[i]=='-')&&(c[1]!='l'||c[1]!='L'))
flag=0;
else if(i==0)
{
if(c[i]<'0'||c[i]>'9')
if(c[i]!='+'&&c[i]!='-')
flag=0;
}
else if(i==len-1)
{
if(c[i]<'0'||c[i]>'9')
if(c[i]!='l'&&c[i]!='L')
flag=0;
}
else
{
if(c[i]<'0'||c[i]>'9')
flag=0;
}
}
if(c[0]=='0'&&len>1)
flag=0;
else if(len>10)
{
if(c[0]=='+'||c[0]=='-')
{
if(len>11&&len<=21)
{
if(c[len-1]!='l'&&c[len-1]!='L')
flag=0;
}
else if(len>21)
flag=0;
}
else
{
if(len<=20)
{
if(c[len-1]!='l'&&c[len-1]!='L')
flag=0;
}
else if(len>20)
flag=0;
}
}
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
正则表达式是牛,有限状态自动机是灭霸。