问题描述:IPv4地址一共有4小节,每节的范围是0~255。请利用这个特性把IPv4地址转换为一个32位的整数,IPv4地址以字符串形式给出,要求每个IPv4地址只能对应到唯一的整数上。
要求:(1)对各种非法字符串(空串,含有IP地址中不存在的字符,非合法的点分十进制,十进制整数不在合法区间内)能够给出合理地解释(使用异常或者使用特殊约定的返回值);
(2)最多遍历字符一次;
思路:从头部到尾部扫描,一旦发现无法转换,立即返回false。
#include <iostream>
#include <string>
using namespace std;
/*
strIP位IPv4地址字符串,ip为转换的32位整数
如果转换成功返回true,转换失败返回false
*/
bool ConvertIPv4ToUInt(const string &strIP, unsigned int &ip)
{
int len = strIP.size();
if (len < 7 || len > 15)
return false;
unsigned int nums[4];
unsigned int part_num = 0;
int dot_count = 0; //"."的数量,必须为3个
for (int i = 0; i < len; ++i)
{
char ch = strIP[i]