ip判断(oj)

题目描述

在基于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++的函数会使程序更加简洁

上一篇:面试高频~单链表OJ题总结(二)


下一篇:2.5约瑟夫问题(OJ 2746)DAY 2