2017-10-20 28 views
-2

Je suis en train de diviser un char * basé sur un séparateur en utilisant des vecteurs imbriqués mais le dernier mot du char * semble ne pas être ajouté au vecteur>scission mise en œuvre en utilisant des vecteurs et char *

vector<vector<char>> split(char* word, const char de){ 
    vector<vector<char>> words; 
    vector<char> c_word; 
    while(*word){ 
     if(*word == de){ 
      words.push_back(c_word); 
      c_word.clear(); 
      word++; 
      continue; 
     } 
     c_word.push_back(*word); 
     word++; 
    } 
    return words; 
} 

Exemple utilisation:

int main() { 
    char *let = "Hello world!"; 

    vector<vector<char>> words = split(let, ' '); 
    for(int x = 0;x < words.size();x++){ 
     for(int y = 0;y < words[x].size();y++){ 
      cout << words[x][y]; 
     } 
     cout << endl; 
    } 
} 

ce imprimerait seulement Bonjour

+0

pouvez-vous fournir un code avec une entrée de sorte que vous pouvez l'essayer? www.ideone.com –

+0

Y a-t-il une raison pour utiliser 'std :: vector >' au lieu de 'std :: vector '? Et 'char *' au lieu de 'std :: string'? –

+0

À moins que le dernier char ne soit le délimiteur, vous aurez toujours un mot dans 'c_word' lorsque la boucle sera terminée. –

Répondre

-2

pour quelqu'un d'autre se demander comment faire en utilisant la mise en œuvre char * au lieu de chaîne. Ce que mon code manque est un ajout final de c_word aux mots depuis le tout est déjà terminée lorsqu'elle atteint la terminaison nulle et ne pas ajouter le dernier mot, voici le code fixe:

vector<vector<char>> split(char* word, const char de){ 
    vector<vector<char>> words; 
    vector<char> c_word; 
    while(*word){ 
     if(*word == de){ 
      words.push_back(c_word); 
      c_word.clear(); 
      word++; 
      continue; 
     } 
     c_word.push_back(*word); 
     word++; 
    } 
    words.push_back(c_word); 
    return words; 
} 
-1

Voici une code de travail complet avec plusieurs délimiteurs

vector<vector<char>> split(char* word, const char de) { 
    vector<vector<char>> words; 
    vector<char> c_word; 
    int index = 0; 
    int j = 0; 
    char *temp = word; 
    int numspaces = 0; 
    while (*word) { 
     if (*word == de) { 
      words.push_back(c_word); 
      c_word.clear(); 
      word++; 
      j = index; 
      numspaces++; 
     } 
     index++; 
     c_word.push_back(*word); 
     word++; 
    } 
    j +=numspaces; 
    char *sub = &temp[j]; 
    c_word.clear(); 
    while (*sub) 
    { 
     c_word.push_back(*sub); 
     sub++; 
    } 
    words.push_back(c_word); 
    return words; 
} 
void main() 
{ 
    vector<vector<char>> result = split("Hello World! Ahmed Saleh", ' '); 

}