strchr( )

  Subprogramul strchr() caută un caracter într-un șir și returnează adresa primei apariții.

strchr()

Parametri

  • <șir> : șirul în care se realizează căutarea;
  • <caracter> : caracterul pe care îl căutăm

Returnare

  Se returnează un pointer (adresa) spre prima apariție a caracterului în șirul dat. Acest lucru înseamnă că o eventuală afișare a acestui pointer va arăta tot șirul rămas începând cu această primă apariție, până la prima marcă de sfârșit de șir.

    Sunt 2 cazuri de valori returnate:
  1. pointer spre prima apariție, dacă există;
  2. NULL dacă nu există caracterul în șir.
 Pentru referință, 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

  Subprogramul strchr() și derivata acesteia fac parte din biblioteca <cstring>, care trebuie inclusă în directiva de preprocesare.

Enunț: Afișați numărul de apariții al caracterului c în șirul s.

#include <cstring>
...
int main(){
  char s[41],c,*p;
	int k=0;
  cin.get(s,51);
  cin>>c;
  p=strchr(s,c);
  while(p!=NULL){
    k++;
    p=strchr(p+1,c);
  }
  cout<<"Caracterul "<<c<<" apare de "<<k<<" ori.";
  return 0;
}
Nu mai ninge.
n
Caracterul n apare de 2 ori.
Nu pot veni cu tine.
a
Caracterul a apare de 0 ori.

  Pointerul p va memora adresa primei apariții a caracterului c în s. Cât timp pointerul nu este null, vom crește un contor care memorează aparițiile.
  La fiecare pas, vom continua căutarea de unde am rămas, cu ajutorul pointerului. Deoarece acesta arată spre o poziție din s, putem continua căutarea de la p+1, adică următorul caracter.


strrchr()

strrchr()

  Această funcție respectă același tipar al parametrului și al tipului valorii returnate, cu excepția sensului în care se face căutarea.
  Litera „r” din mijlocul numelui său vine de la „reverse” și numește sugestiv noutatea pe care o aduce, returnează ultima apariție a caracterului în șir (prima de la dreapta la stânga).

#include <cstring>
...
int main(){
  char s[51],c,*p;
  cin.get(s,51);
  cin>>c;
  p=strrchr(s,c);
  if(p!=NULL) cout<<"Ultima aparitie este in pozitia "<<p-s<<'.';
  else cout<<"Caracterul nu apare in sir.";
  return 0;
}
Nu mai ninge.
n
Ultima aparitie este in pozitia 9.
Nu pot veni cu tine.
a
Caracterul nu apare in sir.

  Prin expresia p-s vom afișa poziția spre care arată pointerul p, corespunzătoare poziției ultimei apariții.