Skip to content

strchr

cpp
#include <cstring>
char* strchr(char* s, char c);
  • strchr vine de la string + character.
  • Efect: cauta prima aparitie a caracterului c in sirul s.
  • Returneaza adresa unde a gasit caracterul, sau NULL daca nu exista.

Exemplu cu tabel

Daca s = "abecedar":

index012345678
sabecedar\0
apelrezultatsir de la acea adresa
strchr(s, 'e')s + 2"ecedar"
strchr(s, 'a')s + 0"abecedar"
strchr(s, 'z')NULL
cpp
char* p = strchr(s, 'e');  // p = s + 2
int poz  = p - s;          // poz = 2

A doua aparitie

cpp
char* p1 = strchr(s, 'e');         // prima aparitie: s + 2
char* p2 = strchr(p1 + 1, 'e');    // a doua aparitie: s + 4

Sfat

Avanseaza cu + 1 de la adresa gasita pentru a cauta urmatoarea aparitie.


Verificare existenta

cpp
if (strchr(s, 'x') != NULL)    // 'x' apare in sir
if (strchr(s, 'x') == NULL)    // 'x' nu apare in sir

Cum functioneaza intern

cpp
char* strchr(char* s, char c)
{
    int i;
    for (i = 0; s[i] != '\0'; i++)
        if (s[i] == c)
            return s + i;
    return NULL;
}

Exemplu complet

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

char s[100];
char* p;
int pozitie;

int main()
{
    cin >> s;
    p = strchr(s, 'a');
    pozitie = p - s;
    if (p != NULL)
    {
        cout << "Primul 'a' la pozitia: " << pozitie;
    }
    else
    {
        cout << "Caracterul nu exista";
    }    
    return 0;
}

Intrare:

abecedar

Afisare:

Primul 'a' la pozitia: 0

Cum verific ca un caracter este vocala ?

Observatie

Un caracter este vocala cand este a, e, i, o sau u.

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

char vocale[] = "aeiouAEIOU";
char c;
bool esteVocala;

int main()
{
    cin >> c;
    esteVocala = strchr(vocale, c) != NULL;
    if (esteVocala)
    {
        cout << "Este vocala";
    }
    else
    {
        cout << "Nu este vocala";
    }

    return 0;
}

Intrare:

e

Afisare:

Este vocala

Toate aparitiile unui caracater intr-un cuvant

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

char cuv[100], c;
char* p;

int main()
{
    cin >> cuv >> c;
    p = strchr(cuv, c);
    while (p != NULL)
    {
        cout << p - cuv << " ";
        p = strchr(p + 1, cuv);
    }

    return 0;
}

Intrare:

abecedarele
e

Afisare:

2 4 8 10