2010-11-19 3 views
0

У меня есть следующий код.Разбиение строки с использованием boost :: algorithm :: split

using namespace std; 
using namespace boost; 
int main() 
{ 
SystemConnect hndl; 
int ip1[15],ip2[15]; 
string line; 
while (cout<<"LP>" && getline(cin,line)) { 
    if (line=="exit") 
    break; 
    if (line=="Connect 10.172.21.121 10.109.12.122"){ 
    string str; 
     str="ConInit 10.172.21.121 10.109.12.122"; 
    vector<string> results; 
    split(results,str,is_any_of(" ")); 
    for(vector<string>::const_iterator p=results.begin();p!=results.end();p++){ 
    cout<<*p<<endl; 
    } 
    } 
} 
} 

Это выход, который я получаю.

Connect 
10.172.21.121 
10.109.12.122 

Мне нужно хранить в 10.172.21.121 ip1 & 10.109.12.122 в ip2. Как я могу это сделать

Благодаря

+0

Почему ip1 и ip2 определены как int []? В какой форме вы ожидаете, что они будут хранить IP-адреса? –

+2

Почему, по-вашему, вам нужен 15-элементный массив int для хранения IP-адреса? –

ответ

23

Если вы уже используете импульс, то почему бы не хранить IP-адреса в объектах соответствующего класса?

#include <iostream> 
#include <vector> 
#include <string> 
#include <boost/algorithm/string.hpp> 
#include <boost/asio.hpp> 
namespace ip = boost::asio::ip; 
int main() 
{ 
    std::string str = "ConInit 10.172.21.121 10.109.12.122"; 
    std::vector<std::string> results; 
    boost::split(results, str, boost::is_any_of(" ")); 
    ip::address ip1 = ip::address::from_string(results[1]); 
    ip::address ip2 = ip::address::from_string(results[2]); 
    std::cout << " ip1 = " << ip1 << " ip2 = " << ip2 << '\n'; 
} 

Если вы должны преобразовать их в целые числа, вы можете сделать это, когда это необходимо, с to_bytes, например.

Смежные вопросы