strstr în C

Caută prima apariție a unui subșir într-un șir și întoarce un pointer la ea sau NULL.

Sintaxă
#include <string.h>
char *strstr(const char *text, const char *cautat);

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 este p - text (de tip ptrdiff_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ă.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: strstr

Ai o nelămurire despre utilizarea comenzii strstr sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.