2010-11-19 6 views
0

J'ai le code suivant.Division de la chaîne en utilisant 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; 
    } 
    } 
} 
} 

Ceci est la sortie que je reçois.

Connect 
10.172.21.121 
10.109.12.122 

J'ai besoin de stocker dans 10.172.21.121 IP1 & 10.109.12.122 à IP2. Comment puis-je faire cela

Merci

+0

Pourquoi ip1 et ip2 sont-ils définis comme int []? Sous quelle forme les attendez-vous pour stocker les adresses IP? –

+2

Pourquoi pensez-vous avoir besoin d'un tableau int de 15 éléments pour stocker une adresse IP? –

Répondre

23

Si vous utilisez déjà coup de pouce, pourquoi ne pas stocker les adresses IP dans les objets de la classe appropriée?

#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'; 
} 

Si vous devez les convertir en entiers, vous pouvez le faire en cas de besoin, avec to_bytes par exemple.