输入为一串0~9之间的数字字符,不改变字符串中字符的前后顺序,输出所有合法的ip地址。IPV4下用一个32位无符号整数来表示一个ip地址,一般用点分方式来显示,点将ip地址分成4个部分,如“10.137.17.1”。所以要输出所有合法ip,1、将输入的字符串截断成4部分;2、每部分字符串个数大于0小于4;3、每部分字符串的“值”不能大于255。考虑到这三个方面,代码如下。
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int main(){
string ip;
cin >> ip;
int length = ip.size();
if (length>12||length<4)
{
return 0;
}
//每个子字符串的长度为1~3
for ( int i = 1; i < 4; i++){
for (int j = 1; j < 4; j++){
for (int k = 1; k < 4; k++){
for (int m = 1; m < 4; m++){
if (
//四个子字符串长度之和为string ip的长度。
(length==i+j+k+m)
//每个子字符串的“值”不能超过255
&&(ip.substr(0,i)<="255")
&&(ip.substr(i,j)<="255")
&&(ip.substr(i+j,k)<="255")
&&(ip.substr(i+j+k,m)<="255")
){
cout << ip.substr(0, i) << "." << ip.substr(i, j) << "." << ip.substr(i+j, k) << "." << ip.substr(i+j+k, m) << endl;
}
}
}
}
}
system("pause");
return 0;
}
|