请问这个代码有什么问题吗?有哪里没有考虑到吗?

解题思路就是列出所有no的情况,样例输出是对的,但提交后判错,是有什么情况没有考虑到吗,求指教

img

img

img

img

你这代码,,,说实话我真没看懂,我给写个吧,记住,正则表达式是个好东西!
正则表达式的优点就是,你需要考虑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;

}

正则表达式是牛,有限状态自动机是灭霸。