题目描述
在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧^_^
输入
输入由多行组成,每行是一个字符串,输入由“End of file”结束。
字符串长度最大为30,且不含空格和不可见字符
输出
对于每一个输入,单独输出一行
如果该字符串是合法的IP,输出Y,否则,输出N
样例输入
1.2.3.4 a.b.c.d 267.43.64.12 12.34.56.bb 210.43.64.129 -123.4.5.6
样例输出
Y N N N Y N
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int judge_1(char a[])//判断是否存在字母,若有,则舍去
{
int flag=1;
for(int i=0;a[i]!='\0';i++)
{
if(a[i]!='.')
{
if(a[i]<48||a[i]>57) flag=0;
}
}
return flag;
}
int judge_2(char a[])//判断数字范围是否正确
{
char array[100],s[100]={0};//s为辅助清零数组
int flag=0,temp=0,start=0;
for(int i=0;a[i]!='\0';i++)
{
if(a[i]=='.')//读到点号后回头将数字读入数组
{
for(int j=start;j<i;j++)
{
array[j]=a[j];
}
start=i+1;
temp=atoi(array);//将字符串转化为数字
strcpy(array,s);//array初始化
if(temp>=0&&temp<=255) continue;
else return 0;
}
}
return 1;
}
int main()
{
char str[100];
while(scanf("%s",str)!=EOF)
{
if(judge_1(str)&&judge_2(str)) printf("Y\n");
else printf("N\n");
}
return 0;
}
ps:用c++的函数会使程序更加简洁