思路:将字符串分成4个部分,且保证每一个部分在三个字符以内,然后每个部分的子字符串必须小于"255"的字符串,求出将分割出的4个部分均符合以上条件分割数即可。
代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int T;
string s;
cin >> T;
while(T--)
{
cin >> s;
int len = s.size();
if(len==4)//当长度为4时,只能是一个
{
cout << 1 << endl;
continue;
}
if(len>12)//超出IP的表示范围
{
cout << 0 << endl;
continue;
}
int sum = 0;
for(int i=0; i<min(len-3, 3); i++)//范围的确定:保证后面可以分成3部分且该部分长度不超过3
{
string a = s.substr(0, i+1);//表示[0,i]区间内的字符串
if(a>"255") continue;
for(int j=i+1; j<min(len-2, i+4); j++)
{
string b = s.substr(i+1, j-i);//表示[i+1,j]区间内的字符串
if(b>"255") continue;
for(int k=j+1; k<min(len-1, j+4); k++)
{
string c = s.substr(j+1, k-j);//表示[j+1,k]区间内的字符串
if(c>"255") continue;
string d = s.substr(k+1, len-k);//表示[k+1,len]区间内的字符串
if(d>"255"||d.size()>3) continue;//最后还需要判断是否在3个字符范围内
sum++;
}
}
}
cout << sum << endl;
}
return 0;
}