06年華中科大機試第三題(輸入一個ip地址串,判斷是否合法)

/*第三題是 輸入一個ip地址串,判斷是否合法*/
/*算法思想,IP地址是點分十進制表示,當輸入的有負數或者超過255的或者有前置0 如 001的,就非法*/
/*由於IP有兩種版本 IPV4和 IPV6 ,這裏僅討論IPV4的情況,IPV6的情況實質是一樣的*/

/*測試數據:100.200.12.30    輸出結果: 此IP合法
  測試數據:10               輸出結果:此IP不合法
  測試數據: -100.200.12.30  輸出結果:此IP不合法
  測試數據: 100.200.300.400 輸出結果:此IP不合法
  測試數據:255.255.255.255  輸出結果:此IP合法*/

/*程序:*************************愛X的味道 *****************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int StringToInteger(char *str)
{
	int sum=0,i=0;
	while(str[i]!='\0')
	{
		sum=sum*10+(str[i]-'0');
		i++;
	}
	return sum;
}
int JudgeIp(char * str)
{
	int i=0,j=0,pre=0,num=0;
	char tmp;
	for(i=0;i<4;i++)
	{
		pre=j;
		while( (str[j]!='.') && (str[j]!='\0'))
		{
			if(str[j]<'0' || str[j]>'9')
				return 0;
			j++;
		}
		tmp=str[j];
		str[j]='\0';
		if(strlen(str+pre)<=0)
			return 0;
		num=StringToInteger(str+pre);
		if(num<0 || num> 255)
			return 0;
		str[j]=tmp;
		j++;
	}
	return 1;
}
int main()
{
	int ans;
	char str[100]="\0";
	printf("請輸入待檢查的IP地址:\n\n");
	gets(str);
	ans=JudgeIp(str);
	if(!ans)
		printf("此IP不合法!\n\n");
	else
		printf("此IP合法!\n\n");
	return 0;
}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章