strtok( )
Subprogramul strtok()
este folosit pentru împărțirea unui șir în subșiruri în funcție de caracterele separatoare introduse. Adesea este folosit pentru obținerea cuvintelor dintr-un text.
Parametri
<șirul_truncat>
: șirul pe care îl împărțim;<șirul_separatorilor>
: șirul care conține separatorii luați în considerare.
Returnare
Dacă se găsește un separator, se pune o marcă de sfârșit în acel loc și se returnează un pointer spre primul caracter nenul din subșirul înainte de separator.
- Prin urmare, sunt 2 cazuri de valori returnate:
- pointer spre primul caracter nenul înainte de ultimul separator găsit într-un moment;
NULL
dacă nu se găsește niciun separator până la sfârșitul șirului.
Utilizare
Apelarea subprogramului strtok()
presupune includerea bibliotecii <cstring>
în directiva de preprocesare.
Șirul separatorilor poate fi format din unul sau mai multe caractere.
Enunț: Se citește un text cu maxim 100 caractere. Să se afișeze fiecare cuvânt, câte unul pe rând.
<cstring>
...
int main(){
char s[101],*p;
cin.get(s,101);
p=strtok(s," ,.?!");
while(p!=NULL){
cout<<p<<'\n';
p=strtok(NULL," ,.?!");
}
return 0;
}
George, vii cu mine? Haide!
George
vii
cu
mine
Haide
Vom căuta în s
unul din semnele de punctuație care ar marca separarea cuvintelor. Când se găsește un astfel de separator, subprogramul pune o marcă de sfârșit în loc de acest caracter, astfel că afișarea pointerului p
va arăta literele cuvântului și afișarea se oprește la această marcă pusă.
După afișare, începem o nouă căutare de la caracterul NULL
abia pus recent de funcție. Ne oprim când p
este NULL, adică nu mai există niciun caracter diferit de cele din șirul separatorilor.