2016-04-09 5 views
0

Ci-dessous est le programme que j'ai codé pour diviser la chaîne et stocker dans un vecteur. Comment puis-je récupérer les champs spécifiques de la chaîne et à nouveau concaténer la chaîne attendue en utilisant le symbole pipeline (|).comment supprimer des espaces en vecteur en C++

#include <iostream> 
    #include <vector> 
    #include <string> 
    #include <sstream> 
    using namespace std; 

    vector<string> split(string str, char delimiter) 
    { 
    vector<string> internal; 
    stringstream ss(str); 
    string tok; 
    while(getline(ss, tok, delimiter)) 
    { 
     internal.push_back(tok); 
    } 
    return internal; 
    } 

    int main(int argc, char **argv) 
    { 
    string myCSV = "Event#:11918124|1234|67893|USD||||444400090|||||302|45|USA|||||"; 
    vector<string> sep = split(myCSV, '|'); 
    for(int i = 0; i < sep.size(); ++i); 
    cout << sep[0] << "|" << sep[3] << "|" << sep[7] << "|" << sep[14] << endl; 
    } 

sortie:

Event#:11918124               
1234                   
67893                   

USD                             
444400090          

302                                                
45                                  
USA 

Résultats escomptés:

Event#:11918124|USD|444400090|USA 

Quelqu'un peut-il s'il vous plaît aidez-moi en C++ Je suis nouveau à C++

+1

Les espaces ne sont pas '|', Ce code semble faire ce que vous lui avez demandé. Et si vous voulez tout sur une seule ligne, qu'en est-il de 'endl' après chaque élément de sortie? – WhozCraig

Répondre

1

Tout ce que vous devez faire. est de concaténer les champs nécessaires de votre dossier. Ils sont toujours présents aux mêmes index (0, 3, 7, 14). Donc, dans votre cas, il est aussi simple que:

cout << sep[0] << "|" << sep[3] << "|" << sep[7] << "|" << sep[14] << endl; 

BTW, votre « sortie: » à votre code est erroné.

+0

après modyfying le code en ajoutant un point-virgule au forloop je suis en mesure de voir la sortie attendue. Merci pour votre aide – doe