//合法IP
/*主要判断IP段中每部分的8位是否为数字且在0~255范围内*/
#include <iostream>
#include <string>
using namespace std;
bool ispartip (string str)//判断子字符串是否合法
{
int partlen = str.length();
for (int i = 0; i < partlen;i++)
{
if (!(str[i] >= '0'&&str[i] <= '9'))//判断是不是全是数字
return false;
}
int number = atoi(str.c_str());//把字符串转化为整数
if (number>255)
return false;
return true;
}
int main()
{
string str;
cin >> str;
int len = str.length();
int pos[100] = { 0 }; //记录三个point的位置
int k = 0, i = 0;
for (i = 0; i < len;i++)
{
if (str[i]=='.')
{
pos[k] = i;
k++;
}
}
if (k==3) //找到三个point".",则继续判断,否则一定不是合法ip(点的个数)
{
if (pos[2]-pos[1]==1||pos[1]-pos[0]==1)//三个点point相邻,一定不是合法ip(点的位置)
{
cout << "NO" << endl;
return 0;
}
else
{
//按三个point的位置,分割出四个子字符串,并分别判断四个子字符串是否合法
//substr(char A,char B,int C, int D)函数表示从字符串B的第C个字符处开始,截取长度为D的一串字符串,放入字符串数组A中,返回截取的字符串。
if (ispartip(str.substr(0, pos[0])) && ispartip(str.substr(pos[0] + 1, pos[1] - pos[0] - 1)) &&
ispartip(str.substr(pos[1] + 1, pos[2] - pos[1] - 1)) && ispartip(str.substr(pos[2] + 1, len - pos[2] - 1)))
{
cout << "YES" << endl;
return 0;
}
else
{
cout << "NO" << endl;
return 0;
}
}
}
else
{
cout << "NO" << endl;
return 0;
}
return 0;
}
华为OJ题目(二十):合法IP
最新推荐文章于 2023-12-06 10:53:02 发布