Uscira da un ciclo quando si usano i token

di il
10 risposte

Uscira da un ciclo quando si usano i token

In esempio questo codice

// strings and c-strings
#include <iostream>
#include <cstring>
#include <string>

int main ()
{
  std::string str ("Please split this sentence into tokens");

  char * cstr = new char [str.length()+1];
  std::strcpy (cstr, str.c_str());

  // cstr now contains a c-string copy of str

  char * p = std::strtok (cstr," ");
  while (p!=0)<<<<<<<
  {
    std::cout << p << '\n';
    p = std::strtok(NULL," ");
  }

  delete[] cstr;
  return 0;
}
Il ciclo while prosegue all'infinito.
Io vorrei legger i token contenuti nella stringa e poi uscire dal ciclo senza dovermi ingegnare qualcosa.
C'è la possibilità, un altro tipo di funzione magari?
Non sono riuscito a trovare nulla del genere oltre questa qui.
Grazie come sempre

10 Risposte

  • Re: Uscira da un ciclo quando si usano i token

    Mica si capisce il tuo problema.... Non ti puoi spiegare meglio?
  • Re: Uscira da un ciclo quando si usano i token

    Sto cercando un modo per uscire dal ciclo while.
    Quello che fa questo detto semplicemente è splittare la stringa,
    Ma resta bloccato all'infinito all'interno di un ciclo while.
    Io sto cercando un modo semplice per uscire dal ciclo quando lo split è terminato.
    Una qualche funzione di libreria magari, che permette di uscire dal ciclo quando finisce di splittare la stringa
    Nella situazione attuale non esce dal ciclo quindi mi vedo costretto ad ingegnarmi qualcosa.

    O meglio ancora il copia è incolla di questo codice funziona
    Ma quando lo adatto al mio condice non esce più dal ciclio
    
    tabelle::analizzaStringa(string str)
    {
    
        char * cstr= new char[str.length()+1];
        strcpy(cstr,str.c_str());
    
        char * p = strtok (cstr," ");
        while(cstr!=0)
            {
                cout << p << '\n';
                p=strtok(NULL," ");
            }
    
    }
    
  • Re: Uscira da un ciclo quando si usano i token

    Quindi non devi cercare come uscire ma capire cosa succede quando lo "adatti".
    Dato che sbagli qualcosa sicuramente, facci vedere questo codice "adattato" che genera un ciclo infinito e discutiamo di quello !

    P.S. Questa

    while(cstr!=0)

    è sbagliata perché dovrebbe essere

    while(p!=0)
  • Re: Uscira da un ciclo quando si usano i token

    ...e per forza che non esce mai dal ciclo! continui a verificare che cstr!=0, mentre dovresti verificare che p!=0, perché cstr non cambia mai e, non essendo 0 già in partenza, non diventa mai 0.
  • Re: Uscira da un ciclo quando si usano i token

    Errore mio il ciclo
    while(p!=0)
    
    tabelle::analizzaStringa(string str)
    {
    
        char * cstr= new char[str.length()+1];
        strcpy(cstr,str.c_str());
    
        char * p = strtok (cstr," ");
        while(p!=0)
            {
                cout << p << '\n';
                p=strtok(NULL," ");
            }
    
    
    Adesso però sorge un altro problema...
    se la stringa contiene ad esempio:"Marco(molto spazio bianco)Rossi";
    non la splitta per il troppo spazio tra le due "parole",,,
    come potrei ovviare?

    Forse meglio la vecchia sscanf?
    Mi ricordo che era tutto molto più semplice
  • Re: Uscira da un ciclo quando si usano i token

    Ok risolto cosi
    
    tabelle::analizzaStringa(string str)
    {
    
        char * cstr= new char[str.length()+1];
        strcpy(cstr,str.c_str());
    
        char * p = strtok (cstr," \t");
        while(p!=0)
            {
                cout << p << '\n';
                p=strtok(NULL,"  \t");
            }
    }
    
  • Re: Uscira da un ciclo quando si usano i token

    Alexxandro ha scritto:


    Ok risolto cosi
    Cioè come ti è stato suggerito ...

    Ma dovevi capirlo da solo ... bastava confrontare il codice iniziale con questo !

    E fra l'altro manca la delete !
  • Re: Uscira da un ciclo quando si usano i token

    Non ho copiato il codice completo...
    Hai ragione...
    ho fatto confusione...ero da un bel pò bloccato li...
    non ci ho visto proprio..sorry
  • Re: Uscira da un ciclo quando si usano i token

    Guarda che la delete è importante
  • Re: Uscira da un ciclo quando si usano i token

    Si lo so Oregon..
    Nel mio codice in codblock è scritta...
    Non ho molta confidenza con c++
    Elimina il puntatore alla classe...ma è un vettore di classi?
    
    // strings and c-strings
    #include <iostream>
    #include <cstring>
    #include <string>
    
    int main ()
    {
      std::string str ("Please split this sentence into tokens");
    
      char * cstr = new char [str.length()+1];
      std::strcpy (cstr, str.c_str());
    
      // cstr now contains a c-string copy of str
    
      char * p = std::strtok (cstr," ");
      while (p!=0)<<<<<<<
      {
        std::cout << p << '\n';
        p = std::strtok(NULL," ");
      }
    
      delete[] cstr;
      return 0;
    
Devi accedere o registrarti per scrivere nel forum
10 risposte