这道题的链接是: http://acm.fafu.edu.cn/problem.php?id=1329
我想说,虽然题意很简单。但是还要注意考虑周到真的不容易。比如IP地址为1.3.4.2这样显然是正确的,我们用眼睛一看就知道。但是我们要清楚,IP地址有以下特点:
1、必须分成4快;
2、必须有3个‘.’且两两不相邻;
3、每部分的数字必须在0-255之间;
4、不能有除了数字和点以外的其他字符;
我的代码如下:
#include <stdio.h>
#include <string.h>
bool findelse(char s[])
{
int i;
int len = strlen(s);
if(len > 15)
return false;
for(i = 0; i < len; i++)
if(!((s[i]>='0'&&s[i]<='9')||s[i]=='.'))
return false;
return true;
}
bool finddot(char s[]) //第一步判断是否有四块空间
{
int i = 0;
int count = 0;
int len = strlen(s);
for(i = 0; i < len; i++)
if(s[i] == '.')
count++;
if(count == 3)
return true;
else
return false;
}
bool finds(char s[])
{
int i = 0;
int t = 0;
int len = strlen(s);
while(i <= len)
{
t = 0;
while(s[i] != '.' && i != len)
{
t = 10*t+(int)s[i]-48;
i++;
// printf("%d:%d\n",i,t);
}
if( !(t <= 255 && t >= 0) )
return false;
i++;
}
return true;
}
int main()
{
char s[20];
while(gets(s)!=NULL)
{
if(findelse(s) && finddot(s) && finds(s))
{
printf("YES\n");
}
else
printf("NO\n");
}
return 0;
}