[笔试面试][code_by_hand]将字符串分割为ip地址

一个全是数字的字符串,中间插入3个.,将这个字符串分割为合法的ip地址。比如:字符串1000050000221,可以分割成1.00005.0.000221。

思路:实现一个函数CutString,每次从字符串截取下一个数字,如果这个数字小于255,就继续进行下一段ip地址的截取。否则结束。

代码中为了测试,没有很好的

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 #include <cstdlib>
 5 using namespace std;
 6 
 7 #define IP_SIZE 4
 8 
 9 string s = "1000050000221";//测试字符串
10 
11 void CutString(string str, vector<int> & ip) {
13         if (str == "" && ip.size() == IP_SIZE) {
14                 string temp = s;
15                 for (int i = 0; i < IP_SIZE; i++) {
16                         if (i > 0) {
17                                 cout << ", ";
18                         }
19                         cout << temp.substr(0, ip[i]);
20                         temp = temp.substr(ip[i], temp.length());
21                 }
22                 cout << endl;
23         }
24         if (ip.size() == IP_SIZE) {
25                 return;
26         }
27         for (int i = 1; i <= str.length(); i++) {
28                 string cutted = str.substr(0, i);
29                 string left = str.substr(i, str.length());
31                 int num = atoi(cutted.c_str());
32                 if (num > 255) {
33                         break;
34                 }
35                 ip.push_back(cutted.length());
36                 CutString(left, ip);
37                 ip.pop_back();//回溯
38         }
39 }
40 void test() {
41         string str = "12";
42         str = str.substr(str.length(), str.length());
43         if (str == "") {
44                 cout << "str is blank string" << endl;
45         }else{
46                 cout << "str is null" << endl;
47         }
48 }
49 
50 int main() {
51 //      test();
52         vector<int> tmp;
53         CutString(s, tmp);
54         return 0;
55 }

 

posted @ 2013-10-27 18:52  weiwei5987  阅读(757)  评论(0编辑  收藏  举报