华为在线测试题[基础篇]-判断IP是否合法

华为在线测试题[基础篇]--判断IP是否合法

现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。

现在需要你用程序来判断IP是否合法。

//判断是否为合法IP
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
	string str;
	getline(cin,str);
	char ch;
	unsigned flag=0,k=0,value=0;
	vector<int> ivec(3,0);
	for (int i=0;i!=str.size();++i)
	{
		ch=str[i];
		if (ch!='.')
		{
			ivec[k]=ch-48;
			k=k+1;
			if (i+1!=str.size() && str[i+1]=='.' )
			{
				if (k==1)
				{
					value=ivec[0];
					i=i+1;
				}
				if (k==2)
				{
					value=ivec[0]*10+ivec[1];
					i=i+1;
				}
				if (k==3)
				{
					value=ivec[0]*100+ivec[1]*10+ivec[2];
					i=i+1;
				}
				if (value<256)
				{
					flag++;
					k=0;
				}
				if (value>255)
				{
					break;
				}
				vector<int> ivec(3,0);
			}
			if (i+1==str.size())
			{
				if (k==1)
				{
					value=ivec[0];
					
				}
				if (k==2)
				{
					value=ivec[0]*10+ivec[1];
					
				}
				if (k==3)
				{
					value=ivec[0]*100+ivec[1]*10+ivec[2];
					
				}
				if (value<256)
				{
					flag++;
					k=0;
					break;
				}
			}
		}
	}

	if (flag==4)
	{
		cout<<"YES"<<endl;
	}
	else
		cout<<"NO"<<endl;
	system("PAUSE");
	return 0;
}