|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
[C++] Funzione "strtok": chiaritemi please..
Ciao ragazzi!
Qualcuno saprebbe spiegarmi in parole povere (perchè sono un niubbo anche se il prof universitario ci da già come esperti del c plas plas) come funzione strtok? Ovvero cosa fa e/o come funziona? [C++] #include <iostream> #include <cstring> using namespace std; int main() { char s[] = "Today's date is March 12, 1995."; char* p; cout << "La stringa e': [" << s << "]\nI token sono:\n"; p = strtok(s," "); while (p) { cout << "\t[" << p << "]\n"; p = strtok(NULL, " "); } cout << "Ora la stringa e': [" << s << "]\n"; } [/C++] Questo è un semplice esempio, capisco che tronca la stringa s quando trova lo spazio " ", ma per esempio "p = strtok(NULL, " ");" mi lascia un pò perplesso... ![]() ![]() Grazie!
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
questo non è certo il massimo ma prima di addentrarci dai uno sguardo qui:
http://www.cplusplus.com/ref/cstring/strtok.html
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Strtok si tiene un riferimento interno (leggi una variabile static) che punta al primo elemento da cui cercare la nuova occorrenza...
Quando gli si passa NULL sfrutta questo puntatore per continuare la ricerca... |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Quote:
Thnz @Cionci: ok, adesso mi sembra già molto + chiaro.. Quindi "p" è un array di stringhe con all'interno i vari pezzi di "s" dove cadono gli spazi, il ciclo serve per far continuare questo spezzettamento fino alla fine della stringa "s" grazie a quel P=strtok(NULL,....) giusto? ..se come primo esame avessimo turbo pascal maledizione ![]() ![]() Thnx
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
la strtok se non erro è C, e fa veramente schifo ^^'''
mi spiego, fa egregiamente il suo lavoro, ma con delle limitazioni paurose in c++ gli stessi risultati li si ottengono velocemente con le stl e qualche riga di codice, con molta più soddisfazione secondo me ![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Quote:
E a quanto vedo, ha tolto dai guai molti studenti delle scorse sessioni di esame... ![]() Per questo mi preme capirla bene. Tu che dici della "definizione" che ho dato sopra? ![]()
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Va bene come hai detto te...
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Quote:
![]() (ah, questi niubbi rompi.. ![]() Ciao
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
Quote:
A parte il cout il programma comunque è puro C; il tipo string meriterebbe più considerazione, anche in un corso base. Comunque è giusto che nin si studi quello che chiedono all'esame...
__________________
powered by GNU/Linux [ Debian Sid ] |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Quote:
![]() Grazie a tutti!
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
In bocca al lupo per l'esame, comunque usando la STL il programma io l'avrei scritto così (si può migliorare molto ma sembra funzionare, l'indentazione si è persa nel copia incolla ma basta usare astyle al max):
#include <iostream> #include <cstring> #include <vector> using namespace std; // break a string into a vector tokens vector <string> tokenize ( string str ) { vector <string> result; string::const_iterator it = str.begin(); while ( it != str.end() ) { while ( ( *it == ' ') && (it!=str.end() ) ) it++; // skips duplicated spaces string::const_iterator it2 = it; while ( ( *it2 != ' ') && (it2!=str.end() )) it2++; // move to the position of the following space string tmp ( it , it2 ); // copy range [it,it2) to tmp string result.push_back ( tmp ); it = it2; } return result; } int main() { string s ( "Today's date is March 12, 1995. and the sun shines bright" ); vector<string> tokens = tokenize ( s ); cout << "La stringa e': [" << s << "]\nI token sono " << tokens.size() << " :\n"; for ( uint k=0; k<tokens.size(); k++ ) cout << tokens[k] << " "; cout << "\n\n fine" << endl; //cout << "Ora la stringa e': [" << s << "]\n"; }
__________________
powered by GNU/Linux [ Debian Sid ] |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Quote:
Il programma funzionava, ma chiedeva di implementare una funzione che svolgesse alcune operazioni.. Fino all'ultimo l'ho scritto senza funzione, lasciando tutto nel main.. Quando poi è stato il momento di far andare la funzione..nisbà... Il valore che tornava era quello giusto, ma poi nel main del programma si perdeva chissà dove.. Damn.. ![]() Speriamo che comunque mi valutino il fatto che il programma funziona al 100%.. @ xybercom: mh..sinceramente non saprei neppure come leggerlo il tuo esempio! ![]()
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
Niente di fondamentale comunque la funzione data una stringa ti restituisce un array (un vector è un array "potenziato"
![]()
__________________
powered by GNU/Linux [ Debian Sid ] |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Mar 2000
Città: Parma
Messaggi: 2090
|
Quote:
Mi hanno corretto il compito.. "Corretto, ma fuori tema per la mancanza della funzione. Peccato perchè il programma (per quanto un pò farraginoso) sembra andare bene" Ho preso 18 ![]() NOn so se accettarlo o meno, la prova di programmazione non è facile e ho paura che se stavolta mi è andata anche bene chissà la prossima...potrebbe essere un programma allucinante.. Sob e dire che era perfetto..
__________________
] I've had enough, sick and tired: bring the sun or I'm gone. [ |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:47.