本文最后更新于:2020年7月2日 晚上

题目描述:

写一个算法判断某个字符串是不是一个合法的IP地址。

实现如下:

class Solution
{
public:
	//ip字符串输入默认采用IPV4的点分十进制法,合法地址为0.0.0.0-255.255.255.255
	bool isLegalIP(const string& ip)
	{
		int validSegSize = 0; //记录一共有多少个分段

		int oneSeg = 0; //记录每个分段的数值
		int segLen = 0; //记录是否分段有数值
		for (int i = 0; i < ip.length(); ++i)
		{
			//计算每个分段的数值
			if (ip[i] >= '0' && ip[i] <= '9')
			{
				oneSeg = oneSeg * 10 + (ip[i] - '0');
				//如果分段有数值,就置segLen为1
				++segLen;
			}
			else if (ip[i] == '.') //如果此字符为'.',那么就判断之前的那个分段的值是否合法且是否存在值
			{
				if (oneSeg <= 255 && segLen > 0)
					validSegSize++;
				else
					return false;

				oneSeg = 0; //重置分段值
				segLen = 0; //重置分段是否存在值
			}
			else //如果出现0-9或'.'以外的字符都判断为非法
				return false;
		}

		//判断最后一个分段的合法性
		if (oneSeg <= 255 && segLen > 0)
			validSegSize++;

		//判断是否一共有四个分段
		if (validSegSize == 4)
			return true;
		else
			return false;
	}
};