题目:
如何判断一个字符串是否为合法的IP地址。
要求:
- 不能使用正则表达式和自带的库函数。
C++源码如下:
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
bool ip_add_res(const char* ip_val)
{
int point_num = 0;
int point_pos [10]= {0};
int len = strlen(ip_val);
int sum;
int i = 0;
while(i < len)
{
if(ip_val[i] == '.')
{
point_pos[point_num] = i;
point_num++;
}
i++;
}
if(point_num != 3)
{
return false;
}
i = 0;
int pos = point_pos[0];
int temp;
for(int j = 0; j <= point_num; j++)
{
if(j == 0)
{
temp = point_pos[0]+1;
}
else if(j < 3)
{
temp = point_pos[j] - pos;
}
else if(j == 3)
{
temp = len - point_pos[point_num - 1];
}
switch(temp-1)
{
case 1:
{
if( j == 3)
sum = (int)(ip_val[len-1] - 48);
else
sum = (int)(ip_val[point_pos[j]-1] - 48);
if(sum < 0 || sum > 9)
return false;
break;
}
case 2:
{
if( j == 3)
sum = (int)(ip_val[len-1] - 48) + 10*(int)(ip_val[len-2] - 48);
else
sum = (int)(ip_val[point_pos[j]-1] - 48) + 10*(int)(ip_val[point_pos[j]-2] - 48);
if(sum < 0 || sum > 99)
return false;
break;
}
case 3:
{
if( j == 3)
sum = (int)(ip_val[len-1] - 48) + 10*(int)(ip_val[len-2] - 48) + 100*(ip_val[len-3] - 48);
else
sum = (int)(ip_val[point_pos[j]-1] - 48) + 10*(int)(ip_val[point_pos[j]-2] - 48) + 100*(ip_val[point_pos[j]-3] - 48);
if(sum < 0 || sum > 255)
return false;
break;
}
default:
return false;
}
if(j <= 2)
pos = point_pos[j];
}
}
int main()
{
char *ip = "127.0.0.1";
bool res;
res = ip_add_res(ip);
if(res)
cout << "The res true!" << endl;
else
{
cout << "The res false!" << endl;
}
return 0;
}
因为题目要求不能使用库函数,因此只能使用这种方法逐个字符分析处理,程序粗制滥造,bug很多,仅用于提供思路和简单的方法,希望能够帮助需要的人