Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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.

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()), ... );


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?

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

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?

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.

PM