判斷IP地址是否合法

#include<iostream>
#define maxn 999
using namespace std;
int judge(char s[],int len)
{
	if(len<7||len>15||s[0]=='.'||s[len-1]=='.')//檢查長度和首、尾 
	return 0;
	for(int i=0;s[i]!='\0';i++)//檢查是否只有.和數字 
	{
		if(s[i]!='.')
		{
			if('9'<s[i]||s[i]<'0')
				return 0;	
		}
	}
	int ct=0;
	for(int i=0;s[i+1]!='\0';i++)//檢查.的個數,且不能有連續的. 
	{
		if(s[i]=='.')
		ct++;
		if(s[i]=='.'&&s[i+1]=='.')
		return 0;
	}
	if(ct!=3)
	return 0;
	
	int k=0,sum[4],flag=0;
	for(int i=0;s[i]!='\0';i++)//轉換數值
	{
		int temp=0;
		while(s[i]!='.')
		{
			temp=(temp*10+int(s[i]-'0'));
			i++;	
			if(s[i]=='\0')
			{
				flag=1;
				break;
			}
			if(flag)
			break;
		}
		sum[k++]=temp; 
	}
	for(int i=0;i<4;i++)//數值必須在0-225之間 
		if(0>sum[i]||sum[i]>255)
			return 0;
	return 1;
}
int main()
{
	char str[maxn];
	int len=0;
	scanf("%s",str);
	for(int i=0;str[i]!='\0';i++)
	len++;
	if(judge(str,len))
	cout<<"合法"<<endl;
	else
	cout<<"不合法"<<endl;
}

 

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