IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255),8位数为一组。
因此一共分为四层,每层最多三位,0可作为单独的一层,但是如果0是还有其它位的一层的开头位置是非法的。
stoi()方法将string类型转换为int类型。
//IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255)
#include<iostream>
using namespace std;
#include<string>
#include<vector>
//str存储输入的字符串
//level表示当前所在的层
//index表示下标
//v用来存储结果
void dfs(string str, int level, int index, vector<string> v) {
//截止条件
if (level == 5 || index == str.length() - 1) {
if (level == 5 && index == str.length() - 1) {
for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it;
if (it != v.end() - 1) {
cout << ".";
}
}
cout << endl;
}
return;
}
//候选人
for (int i = 1; i < 4; i++) {
string x = str.substr(index + 1, i);
if (stoi(x) <= 255 && (x.compare("0") == 0 || x[0] != '0')) {
v.push_back(x);
dfs(str, level + 1, index + i, v);
v.pop_back();
}
}
}
int main() {
string str;
cin >> str;
vector<string> v;
dfs(str, 1, -1, v);
return 0;
}