字符串解析出所有ip地址

/*given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",
return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)
*/

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

class Solution
{
public:
	std::vector<std::string> restoreIpAddresses(std::string s)
	{
		std::string::iterator l1,l2,l3;
		std::string str1,str2,str3,str4;
		std::vector<std::string> vec;
		for(int i=1;i<=3;++i)
		{
			l1=s.begin()+i;
			str1=std::string(s.begin(),l1);
			if(!isValid(str1))
				continue;
			for(int j=1;j<=3;++j)
			{
				l2=l1+j;
				str2=std::string(l1,l2);
				if(!isValid(str2))
					continue;
				for(int t=1;t<=3;++t)
				{
					l3=l2+t;
					if(l3>=s.end())
						break;
					str3=std::string(l2,l3);
					str4=std::string(l3,s.end());
					if(!isValid(str3) || !isValid(str4))
						continue;
					vec.push_back(str1+"."+str2+"."+str3+"."+str4);
				}
			}
		}
		return vec;
	}
private:
	bool isValid(const std::string& sub)
	{
		if(sub.size()==1)
			return true;
		else if(sub.size()==2 && sub[0]!='0')
			return true;
		else if(sub.size()==3 && sub[0]>='1' && sub[0]<='2')
		{
			if(sub[0]=='2' &&((sub[1]=='5' && sub[2]>'5')||(sub[1]>'5')))
				return false;
			return true;
		}
		return false;
	}
};


int main(int argc,char* argv[])
{
	std::string str("172162541");
	Solution s;
	std::vector<std::string> vec=s.restoreIpAddresses(str);
	std::for_each(vec.begin(),vec.end(),[](const std::string& s)
			{
				std::cout<<s<<std::endl;
			}
			);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值