Skip to content

strstr

cpp
#include <cstring>
char* strstr(char* s, char* sub);

strstr vine de la string + substring. Efect: cauta prima aparitie a subsirului sub in sirul s. Returneaza adresa de inceput a primei aparitii, sau NULL daca sub nu se gaseste.


Exemplu cu tabel

Daca s = "eu am leagane":

index012345678910111213
seuamleagane\0
apelrezultatsir de la acea adresa
strstr(s, "le")s + 6"leagane"
strstr(s, "am")s + 3"am leagane"
strstr(s, "xyz")NULL

A doua aparitie

cpp
char* p1 = strstr(s, "le");
char* p2 = strstr(p1 + strlen("le"), "le");
// sau prescurtat: p1 + 2  (lungimea lui "le" este 2)

Sfat

Avanseaza cu + strlen(sub) de la adresa gasita pentru a nu gasi aceeasi aparitie.


Cum functioneaza intern

cpp
char* strstr(char* s, char* sub)
{
    int i, j;
    bool gasit;
    for (i = 0; s[i] != '\0'; i++)
    {
        gasit = 1;
        for (j = 0; sub[j] != '\0'; j++)
        {
            if (s[i + j] != sub[j]) 
            { 
                gasit = 0; 
                break; 
            }
        }
        if (gasit == 1)
            return s + i;
    }
    return NULL;
}

Exemplu complet

cpp
#include <iostream>
#include <cstring>
using namespace std;

char s[200], sub[50];
char* p;

int main()
{
    cin >> s >> sub;
    p = strstr(s, sub);
    if (p != NULL)
        cout << "Gasit la pozitia: " << p - s;
    else
        cout << "Nu exista";
    return 0;
}

Intrare:

abecedar
ece

Afisare:

Gasit la pozitia: 2