Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - funzioni classe string
Forum - C/C++ - funzioni classe string

Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 17:32
Martedì, 14/12/2010
Nella libreria #include<string>

esiste una funzione che divide la stringa in più parole?
Proprio come fa strtok con i char* ma purtroppo strtok non riconosce una string.


Foglia nuovo sinonimo di sterilità!
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 20:08
Martedì, 14/12/2010
Non funziona perché la strtok vuole come parametro un char * mentre la c_str() ritorna un const char *.

Devi fare un cast:

Codice sorgente - presumibilmente Plain Text

  1. strtok(const_cast<char *>(stringa.c_str()), ... );



"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM
Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 18:29
Mercoledì, 15/12/2010
L'errore è che il puntatore deve essere char* giusto?


Foglia nuovo sinonimo di sterilità!
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
1
Down
V
Segnala al moderatore
Postato alle 20:02
Mercoledì, 15/12/2010
Testo quotato

Postato originariamente da lorenzo:

l'errore è

string *puntatore;

La strtok ritorna un char *, non un std::string.
Dovrai quindi fare:

Codice sorgente - presumibilmente C/C++

  1. char *puntatore = NULL;
  2. puntatore = strtok(const_cast<char *>(str.c_str()) , " ");
  3. while(puntatore!=NULL)
  4. {
  5.                                                
  6.       puntatore = strtok(NULL, " ");
  7. }



Non puoi utilizzare la classe string come risultato di una strtok.



quoto

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 17:54
Martedì, 14/12/2010
prova a passare <stringa>.c_str() come parametro alla strtok

PM
Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:34
Martedì, 14/12/2010
Mi dice che la conversione non è valida


Foglia nuovo sinonimo di sterilità!
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 12:49
Mercoledì, 15/12/2010
Testo quotato

Postato originariamente da lorenzo:

Non funziona perché la strtok vuole come parametro un char * mentre la c_str() ritorna un const char *.

Devi fare un cast:

Codice sorgente - presumibilmente Plain Text

  1. strtok(const_cast<char *>(stringa.c_str()), ... );




giusto :rotfl:

PM
Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:27
Mercoledì, 15/12/2010
string *puntatore;
puntatore = strtok(const_cast<char *>(str.c_str()) , " ");
while(puntatore!=NULL)
{
                                              
      puntatore = strtok(NULL, " ");
}

Purtroppo invece il compilatore mi da lo stesso errore:
cannot convert `char*' to `std::string*' in assignment

Cosa posso fare?


Foglia nuovo sinonimo di sterilità!
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 19:52
Mercoledì, 15/12/2010
l'errore è

string *puntatore;

La strtok ritorna un char *, non un std::string.
Dovrai quindi fare:

Codice sorgente - presumibilmente C/C++

  1. char *puntatore = NULL;
  2. puntatore = strtok(const_cast<char *>(str.c_str()) , " ");
  3. while(puntatore!=NULL)
  4. {
  5.                                                
  6.       puntatore = strtok(NULL, " ");
  7. }



Non puoi utilizzare la classe string come risultato di una strtok.


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM