【ACM】华为oj--合法ip

时间:2021-12-22 18:53:22

题目描述:

现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。

现在需要你用程序来判断IP是否合法


输入:输入一个ip地址


输出:返回判断的结果YES or NO


样例:

10.138.15.1

YES


分析:

1. 分为4段,前三段以’.'结束,最后一个以’\0'结束

2. 每段里面字符应当都是数字

3.每段数字【0,255】,注意0.0.0.0这样也是合法的


#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

int cinverti(char s[])
{
int len,t=0;
len=strlen(s);
for(int i=0;i<len;i++)
{
t=10*t+s[i]-'0';
}
return t;
}

int IsIP(char str[])
{
char *p=str,tmp[10];
int i=0,num;
while(*p!='\0')
{
i=0;
while(*p!='.'&&*p!='\0')
{
if(*p-'0'>9||*p-'0'<0)
return 0;
tmp[i]=*p;
p++;
i++;
}
tmp[i]='\0';
num=cinverti(tmp);
if(num<0||num>255)
return 0;
p++;
}
return 1;
}

int main()
{
// freopen("in.txt","r",stdin);
char ip[30]={'\0'};
cin>>ip;
if(IsIP(ip))
printf("YES\n");
else
printf("NO\n");
return 0;
}