题解 | #合法IP#
合法IP
https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9
#include <stdio.h>
#include <string.h>
int split(char str[50],char **sub)
{
int num=0;
char key[2]=".";
char *q=str;
q=strtok(str,key);
while(q)
{
sub[num++]=q;
q=strtok(NULL,key);
}
//printf("num=%d\n",num);
return num; //num 我在sub[]中已经自增了一次,就不要再自增了,以及最后的num输出究竟是++num还是num++还是num,这个容易出错
}
int is_OK(char IP[10])
{
int i=0;
int len=strlen(IP);
//printf("%s\n",IP);
//printf("IP[0]=%c\n",IP[0]);
for(i=0;i<len;i++)
{
if(IP[i]>'9'||IP[i]<'0')
{
//printf("flag1\n");
return 0;
}
}
i=0;
if(IP[i]=='0'&&IP[i+1]!='\0') //一个是忘记了==,一个是忘记了给0上''
{
//printf("flag2\n");
return 0;
}
int a =atoi(IP);
if(a<0||a>255)
{
//printf("flag3\n");
return 0;
}
return 1;
}
int main()
{
char str[50]={0};
char *sub[10]={0};
while (scanf("%s",str) != EOF)
{
if(split(str, sub)!=4)
{
//printf("aaaa\n");
printf("NO\n");
continue;
}
else
{
int i=0;
int ret=1;
for(i=0;i<4;i++)
{
//printf("is_OK=%d\n",is_OK(sub[i]));
ret &= is_OK(sub[i]);
}
if(ret==1)
{
printf("YES\n");
continue;
}
else
{
printf("NO\n");
continue;
}
}
}
return 0;
}

查看3道真题和解析