本题主考的是出数据的能力,要考虑各种特殊的情况,所以平时还是有必要加大对 出数据能力的训练
错误的特殊数据
145.124.4
192.168.18
12.145.154.63.45
123.123.123
123..123.45
.124.45.6
45.134.4.
.124.124.3.
192.168.0123.41
#include <iostream>
#include <cstdio>
using namespace std;
bool qu1(int num) //判断数字是否是8位无符号整数
{
if(num>=0&&num<=255) return true;
else return false;
}
bool qu2(char s[])
{
int ans=0,a=0;
for(int i=0; s[i]!='\0'; i++)
{
if(s[i]=='.') ans++,a=0;
if(a>=4) return false; //两点之间的数字不超过4个
if(s[i]!='.'&&(s[i]<'0'||s[i]>'9')) return false; // 没有除数字和.之外的字符
if(s[i]=='.'&&(i==0||s[i+1]=='.'||s[i+1]=='\0')) return false; // .不能连续出现,且不能在第一位和最后一位
a++;
}
if(ans==3) return true; //点的个数为3
else return false;
}
int main()
{
char s[100];
while(gets(s)!=NULL)
{
if(qu2(s))
{
bool flag=true;
int a=0;
for(int i=0; s[i]!='\0'; i++)
{
if(s[i]!='.') a=a*10+s[i]-'0';
else
{
if(qu1(a)) a=0;
else
{
flag=false;
break;
}
}
}
if(!qu1(a)) flag=false;
if(flag) printf("YES\n");
else printf("NO\n");
}
else printf("NO\n");
}
return 0;
}