请各位大佬看看我这写的稀碎的check函数
bool check(string str)
{
if(str.size() > 25)
return false;
if(str[0] != '1' && str[0] != '2' && str[0] != '3' &&
str[0] != '4' && str[0] != '5' && str[0] != '6' &&
str[0] != '7' && str[0] != '8' && str[0] != '9' && str[0] != '0')
return false;
if(str[0] == '0' && (str[1] == '1' || str[1] == '2' || str[1] == '3' ||
str[1] == '4' || str[1] == '5' || str[1] == '6' ||
str[1] == '7' || str[1] == '8' || str[1] == '9' || str[1] == '0'))
return false;
int num1 = 0, num2 = 0;
int tep1 = 0, tep2 = 0;
for(int i = 0;i < str.size();i++)
{
if(str[i] == '-')
return false;
if(str[i] == '.')
{
num1++;
tep1 = i;
}
if(str[i] == ':')
{
num2++;
tep2 = i;
}
if(tep2 < tep1 && tep2 != 0 )
return false;
if(num1 > 3 || num2 > 1)
return false;
}
if(num1 != 3 || num2 != 1)
return false;
vector<int> a;
for(int i = 0;i < str.size();i++)
{
if(str[i] == '0' && (str[i + 1] == '1' || str[i + 1] == '2' || str[i + 1] == '3' ||
str[i + 1] == '4' || str[i + 1] == '5' || str[i + 1] == '6' ||
str[i + 1] == '7' || str[i + 1] == '8' || str[i + 1] == '9' || str[i + 1] == '0')
&&(str[i - 1] == ':' || str[i - 1] == '.'))
return false;
if(str[i] == '1' || str[i] == '2' || str[i] == '3' ||
str[i] == '4' || str[i] == '5' || str[i] == '6' ||
str[i] == '7' || str[i] == '8' || str[i] == '9' || str[i] == '0')
{
a.push_back(str[i] - '0');
}
else if(str[i] == '.' || str[i] == ':')
{
if(a.size() > 3)
return false;
long long ans;
if(a.size() == 1)
ans = a[0];
if(a.size() == 2)
ans = 10 * a[0] + a[1];
if(a.size() == 3)
ans = 100 * a[0] + 10 * a[1] + a[2];
if(ans > 255)
return false;
a.clear();
}
else if(str[i] == '#')
{
if(a.size() > 6)
return false;
long long ans;
if(a.size() == 1)
ans = a[0];
if(a.size() == 2)
ans = 10 * a[0] + a[1];
if(a.size() == 3)
ans = 100 * a[0] + 10 * a[1] + a[2];
if(a.size() == 4)
ans = 1000 * a[0] + 100 * a[1] + 10 * a[2] + a[3];
if(a.size() == 5)
ans = 10000 * a[0] + 1000 * a[1] + 100 * a[2] + 10 * a[3] + a[4];
if(ans > 65535)
return false;
a.clear();
}
}
return true;
}