#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
1.切割字符串,分别讨论
int main()
{
char ch[50]={};
while(~scanf("%s", ch))
{
int i, flag = 0;
char *p = ".", *ret = NULL;
for(ret = strtok(ch, p); ret != NULL; ret = strtok(NULL, p))
{
for(i=0; ret[i]; i++)
{
if(!isdigit(ret[i]))
{
flag++;
break;
}
}
if(strlen(ret) > 3)
{
flag++;
break;
}
if(ret[0] == '-')
{
flag++;
break;
}
if(strlen(ret) == 3)
{
if((ret[0]-'0')*100 + (ret[1]-'0')*10 + ret[2]-'0' > 255)
{
flag++;
break;
}
}
}
if(flag == 0)
printf("Y\n");
else
printf("N\n");
}
return 0;
}
2.巧用scanf
int main()
{
int a, b, c, d, k;
char s[100];
while(~(k = scanf("%d.%d.%d.%d", &a, &b, &c, &d)))
{
gets(s);
if(k != 4)
{
printf("N\n");
continue;
}
else
{
if((a < 0 || a > 255) || (b < 0 || b > 255) || (c < 0 || c > 255) || (d < 0 || d > 255))
{
printf("N\n");
continue;
}
}
printf("Y\n");
fflush(stdin);
}
return 0;
}