c语言网-1116-IP判断

题目描述

在基于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<iostream>
   # include<cstring>
   using namespace std;
   int main ()
   {
   	char s[100001];
   	
   	
  while(cin.getline(s,100001,'\n'))
   {
   	
   		int d=0;
   	string c="";
   	string e="";
   	int f=0;
   	bool  isnot=false;
   	
   	for(int b=0;b<strlen(s);b++)
   	{
   			if(s[b]!='.')
		{
			d++;
			e+=s[b];
		}
   		
   		if(s[b]=='.'||b==strlen(s)-1)
   		{
   		
   				f=d;
   				c=e;
   				//--------------------------------------------
   				if(f>=3)
   				{
   						
   					if(c[0]<'1'||c[0]>'2')
   				{
   						isnot=true;
   					cout<<"N"<<endl;
   					break;
					
				   
					   }
					  else
					  {
					  
					  	if(c[0]=='1')
   					{
   					
   						if(c[1]<'0'||c[1]>'9'||c[2]<'0'||c[2]>'9')
   						{
   							isnot=true;
   							cout<<"N"<<endl;
   							break;
						   }
						  
					   } 
   					 if(c[0]=='2')
						   {
						   	
						   		if(c[1]<'0'||c[1]>'5'||c[2]<'0'||c[2]>'5')
   						{
   							isnot=true;
   							cout<<"N"<<endl;
   							break;
						   }
						   }
				   
				 
				   }
			}
			//------------------------------------------------------
			//-------------------------------------------------------
				   if(f==2)
				   {
				   		if(c[0]<'0'||c[0]>'9'||c[1]<'0'||c[1]>'9')
   				{
   						isnot=true;
   					cout<<"N"<<endl;
   					break;
				   }
				   
				   
				  
				   }
				   //-------------------------------------------------------
				   
				   
				   //------------------------------------------------------
				   if(f==1)
				   {
				   	if(c[0]<'0'||c[0]>'9') 
   				{
   						isnot=true;
   					cout<<"N"<<endl;
   					break;
				   }
				  
				   }
   				//--------------------------------------------------------------
   			
   		
			   
			   	e="";
			   	d=0;
		   }
	
	   

   
	  
   	
   	
   	
   }
   if(isnot==false)
   {
   	cout<<"Y"<<endl;
   }
   
}
   
	 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值