
9. Căutarea într-un şir
a.) Funcţia strchr
char *strchr(const char *s, int c);
Descriere
Caută prima apariţie a caracterului c în şirul s. Căutarea se face de la stânga
la dreapta. Caracterul nul este considerat ca făcând parte din şir.
Valoare returnată
Funcţia strchr returnează adresa primei apariţii a caracterului c în şir sau o
expresie de tip char* cu valoarea 0 (null).
Exemplu: Se citeşte un şir de caractere şi un caracter. Căutăm caracterul citit în şir,
în cazul în care îl găsim afişăm poziţia în şir unde se găseşte acest caracter, în cazul
în care caracterul nu se găseşte în şir vom afişa un mesaj.
//CAUTARE CARACTER
#include <iostream.h>
#include <string.h>
#include <conio.h>
void main()
{char sir[50],*p,c;
cout<<"introduceti sir:"; cin>>sir;
cout<<"introduceti caracterul cautat:"; cin>>c;
p=strchr(sir,c); //cauta caracterul c in sir
if(p)
cout<<c<<" se gaseste pe pozitia "<<(p-sir)<<" in sir"; //afiseaza pozitia din sir
else
cout<<c<<" nu se gaseste in sir";
getch();
}
Observaţie:
Am determinat poziţia caracterului găsit în şir scăzând din adresa acestuia,
adresa de început a şirului (p-sir). Astfel am obţinut numărul de elemente cuprinse
între cele două adrese.
b.) Funcţia strrchr
char *strrchr(const char *s, int c);
Are acelaşi rol ca şi funcţia strchr, dar căutarea caracterului c se face de la dreapta
la stânga.
//CAUTARE CARACTER
#include <iostream.h>
#include <string.h>
#include <conio.h>
void main()
{char sir[50],*p,c;
cout<<"introduceti sir:"; cin>>sir;
cout<<"introduceti caracterul cautat:"; cin>>c;
p=strchr(sir,c); //cauta caracterul c in sir
if(p)
cout<<c<<" se gaseste pe pozitia "<<(p-sir)<<" in sir"; //afiseaza pozitia din sir
else
cout<<c<<" nu se gaseste in sir";
getch();
}
c.) Funcţia strstr
char *strstr(const char *s1, const char *s2);
Descriere
Caută prima apariţie a subşirului s2 în cadrul şirului s1. Căutarea se face de la stânga la dreapta.
Valoarea returnată
Funcţia returnează adresa elementului din s1, unde începe subşirul s2.
Dacă s2 nu apare în şirul s1, returnează o expresie de tip char* cu valoarea 0 (null).
Exemplu: Se citesc două şiruri de caractere şir1 şi şir2. Dacă şir2 este subşir al lui
şir1 se va afişa poziţia în şir1 unde se gaseşte. În caz contrar se afişează un mesaj.
//CAUTARE SIR
#include <iostream.h>
#include <string.h>
#include <conio.h>
void main()
{char sir1[50],sir2[50],*p;
cout<<"introduceti sir1:"; cin>>sir1;
cout<<"introduceti sir2:"; cin>>sir2;
p=strstr(sir1,sir2);
if(p)
cout<<sir2<<" se gaseste pe pozitia "<<(p-sir1)<<" in sir";
else
cout<<sir2<<" nu se gaseste in sir1";
getch();
}