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.

strtok()

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:
  1. pointer spre primul caracter nenul înainte de ultimul separator găsit într-un moment;
  2. NULL dacă nu se găsește niciun separator până la sfârșitul șirului.
  Pointerii sunt variabile care indică adresa (locația) unei valori. În general, se declară prin introducerea caracterului '*' între tipul de dată și nume. Ei nu se află în materia pentru Bacalaureat, dar se află în materia școlară de clasa a X-a.

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.