Ce face strstr
strstr(text, cautat) întoarce un pointer la începutul primei apariții a lui cautat în text. Dacă subșirul nu apare, întoarce NULL. Dacă cautat este șirul gol, întoarce chiar text.
Căutarea ține cont de literele mari și mici: „Iași” nu se potrivește cu „iași”. Funcția standard nu are variantă fără diferențe de majuscule (strcasestr există doar pe unele sisteme).
Pentru a număra toate aparițiile, continui căutarea de la p + strlen(cautat).
Parametri
| Parametru | Descriere |
|---|---|
text |
Șirul în care cauți. |
cautat |
Subșirul căutat. |
Ce returnează
Pointer în text la începutul potrivirii sau NULL.
Exemple
Exemplul 1: Conține un cuvânt?
Poziția este numărată în octeți: „ă” și „î” din fața orașului ocupă câte 2 octeți în UTF-8, deci indicele lui „Iași” este 31 în octeți, deși în fața lui sunt doar 29 de caractere.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *mesaj = "Comanda ta a fost livrată în Iași.";
if (strstr(mesaj, "livrată") != NULL) {
printf("Mesaj de livrare\n");
}
const char *p = strstr(mesaj, "Iași");
if (p != NULL) {
printf("Orașul apare la octetul %td\n", p - mesaj);
}
return 0;
}
Rezultat
Mesaj de livrare
Orașul apare la octetul 31
Exemplul 2: Numărarea tuturor aparițiilor
#include <stdio.h>
#include <string.h>
int main(void) {
const char *text = "ana are mere, ana are pere, ana vinde";
const char *cuvant = "ana";
int numar = 0;
for (const char *p = strstr(text, cuvant); p != NULL; p = strstr(p + strlen(cuvant), cuvant)) {
numar++;
}
printf("\"%s\" apare de %d ori\n", cuvant, numar);
return 0;
}
Rezultat
"ana" apare de 3 ori
Greșeli frecvente
- Inversezi argumentele:
strstr("mere", text)caută tot textul în cuvântul „mere”. - Folosești rezultatul ca indice:
strstrîntoarce un pointer; indicele estep - text(de tipptrdiff_t, afișat cu%td).
Comenzi înrudite
strchr și strrchr: Caută un caracter într-un șir: strchr găsește prima apariție, strrchr pe ultima.strtok: Împarte un șir în bucăți (tokeni) după unul sau mai multe caractere separatoare, modificând șirul original.strcmp și strncmp: Compară două șiruri caracter cu caracter și spune dacă sunt egale sau care vine primul.strlen: Numără caracterele unui șir C până la terminatorul ‘\0’, fără să-l includă.
Întrebări & Exemple de Cod:
strstrAi o nelămurire despre utilizarea comenzii
strstrsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.