旧日风声


私信TA

用户名:shawfi

访问量:7009

签 名:

等  级
排  名 3637
经  验 1883
参赛次数 0
文章发表 18
年  龄 0
在职情况 学生
学  校 重庆邮电大学
专  业

  自我简介:

解题思路:
先以'.'号为间隔符进行分段。再一次对每段判断是否为数字,如果是数字则进行转换,否则打印N;最后进行数字的大小判断,观察其是否在[0, 255]的范围内。

注意事项:
注意判断时所读取的数组长度。

参考代码:

//1116: IP地址判断 

#include <stdio.h>
#include <string.h>


	char a[4], b[4], c[4], d[4], ip[30];
	int i=0;
	
//	aflag标志数,1为数,0为非数;
//	alen分段数;
//	anum转换后的数字; 
	int aflag, bflag, cflag, dflag;
	int alen, blen, clen, dlen;
	int anum, bnum, cnum, dnum;

	
int main()
{
	while(scanf("%s", ip) != EOF)
	{
//		对标志符、分段数、转换后的数字进行初始化 
		

		aflag=1, bflag=1, cflag=1, dflag=1;
		anum=0, bnum=0, cnum=0, dnum=0;
		alen=0, blen=0, clen=0, dlen=0;
		i = 0;
		
		if(strlen(ip) > 16)
		{
			printf("N\n");
			continue;
		}
//		将原字符串分为四段 
		while(ip[i] != '.')
		{
			a[alen] = ip[i];
			alen++;
			i++;
			
		}
//		第一段结束 
		
		i++;
		while(ip[i] != '.')
		{
			b[blen] = ip[i];
			blen++;
			i++;
			
		}
//		第二段结束 

		i++;
		while(ip[i] != '.')
		{
			c[clen] = ip[i];
			clen++;
			i++;
			
		}
//		第三段结束 

		i++;
		while(i < strlen(ip))
		{
			d[dlen] = ip[i];
			dlen++;
			i++;
			
		}
//		第四段结束 

//		判断每个字符是否是数字,是则转换为int类型,否则将标志数置0;
//		注意:从数组中取出的数字为ascii码,需要减去 49; 

//		在第一次使用a[]之后,如果a[]中所有的元素已经被使用过一次,而之后的较短的IP地址进入后,有一部分没有完全覆盖,会出错。
//		这时进行数字转换判断时,应该以分段时的长度为准,而不是已数组a[]的长度。 
		for(i=0; i<alen; i++)
		{
			if( a[i] <'0' || a[i] >'9' )
			{
				aflag = 0;
				break;
			}
			else
			{
				anum = anum*10 + (a[i]-48);
			}
		}
		
		for(i=0; i<blen; i++)
		{
			if( b[i] <'0' || b[i] >'9' )
			{
				bflag = 0;
				break;
			}
			else
			{
				bnum = bnum*10 + (b[i]-48);
			}
		}
		
		for(i=0; i<clen; i++)
		{
			if( c[i] <'0' || c[i] >'9' )
			{
				cflag = 0;
				break;
			}
			else
			{
				cnum = cnum*10 + (c[i]-48);
			}
		}
		
		for(i=0; i<dlen; i++)
		{
			if( d[i] <'0' || d[i] >'9' )
			{
				dflag = 0;
				break;
			}
			else
			{
				dnum = dnum*10 + (d[i]-48);
			}
		}
	
		
		if( aflag == 0 || bflag == 0 || cflag == 0 || dflag == 0)
		{
			printf("N\n");
			continue;
		}
	
//	判断是否在[0, 255]的范围内 
		if( anum < 0 || anum > 255 )
		{
			printf("N\n");
			continue;
		}
		else if( bnum < 0 || bnum > 255 )
		{
			printf("N\n");
			continue;
		}
		else if( cnum < 0 || cnum > 255 )
		{
			printf("N\n");
			continue;
		}
		else if( dnum < 0 || dnum > 255 )
		{
			printf("N\n");
			continue;
		}
		else
		{
			printf("Y\n");
		}
	
	}
}


 

0.0分

0 人评分

  评论区

  • «
  • »