PDA

Visualizza la versione completa : [c++] string


Kilin
21-05-2008, 01:20
ciao a tutti...

mi interesserebbe suddividere in token, diciamo così, una string letta da console in questo modo: se un utente inserisce come stringa "ciao a tutti\n" (ho scritto \n per indicare che viene effettuato il ritorno carrello) vorrei intanto smettere di leggere quando trova lo \n (questo si puo' fare con la funzione getline() ) e poi vorrei poter ottenere "ciao" "a" "tutti", possibilmente ottenendo anche il numero dei token che ho ho ottenuto per controllare che ad esempio la sintassi sia corretta...

in parole povere vorrei una funzionalità come quella che si ha utilizzando gli argomenti del main: se scrivo program.txt ciao pippo, ottengo un vettore con i vari token e il numero degli argomenti... io vorrei la stessa cosa, solo che leggo da console.

potete darmi una mano?

vi ringrazio

menphisx
21-05-2008, 01:47
char *string = "ciao a tutti";
char *token = NULL;

token = strtok(string, " ");
puts(token);

while((token = strtok(NULL, " ")) != NULL){

puts(token);

}


oppure:


stringstream ss;

ss << "ciao a tutti";

while(!ss.eof()){

string token;

ss >> token;

cout << token << std::endl;

}


:ciauz:

Kilin
21-05-2008, 09:44
innanzitutto grazie per la risposta!

nel primo codice, non ho ben chiaro cosa faccia la "puts()"...

per questo avevo provato col secondo, solo che dovrei riadattarlo, in quanto la stringa "ciao a tutti" la deve prendere da console (e il cin salta gli spazi.. ho provato con cin.get() con scarsi risultati..)

che ne dici? :biifu:

oregon
21-05-2008, 09:54
Originariamente inviato da Kilin
non ho ben chiaro cosa faccia la "puts()"...


E' una semplicissima funzione che visualizza il contenuto di una stringa a partire dal suo puntatore ...

http://www.cplusplus.com/reference/clibrary/cstdio/puts.html

shodan
21-05-2008, 12:33
Originariamente inviato da Kilin
(e il cin salta gli spazi.. ho provato con cin.get() con scarsi risultati..)



Originariamente inviato da Kilin
(questo si puo' fare con la funzione getline() )


Che problema c'è?


std::string line;
std::getline(std::cin,line);
stringstream ss(line);
ecc...

Kilin
21-05-2008, 13:56
si, avevo risolto anche io così :fagiano:

grazie!

Kilin
21-05-2008, 15:57
Originariamente inviato da menphisx


char *string = "ciao a tutti";
char *token = NULL;

token = strtok(string, " ");
puts(token);

while((token = strtok(NULL, " ")) != NULL){

puts(token);

}


oppure:


stringstream ss;

ss << "ciao a tutti";

while(!ss.eof()){

string token;

ss >> token;

cout << token << std::endl;

}


:ciauz:

scusate una cosa, funziona tutto, ma rileggendo non ho ben chiaro questa parte:




ss >> token;

che cos'è che faccio qui?

EDIT: forse ho capito: lo stream ss è pieno perchè ci ho scritto, usando l'operator >> cerco di leggere di nuovo e mettere in token il risultato, ma lo stream è pieno e quindi sfruttando anche il fatto che l'operator >> come sul cin "tokenizza" per spazi, suddivido lo streamo in questo modo?

Loading