Ce face std::strchr
strchr(s, c) caută prima apariție a caracterului c, iar strstr(s, t) prima apariție a textului t. Ambele returnează un pointer chiar la locul găsit, sau nullptr dacă nu există.
Din pointer afli poziția prin scădere: p - s. Pointerul poate fi folosit și ca un șir nou care începe de acolo (de exemplu, pentru a afișa restul textului).
Parametri
| Parametru | Descriere |
|---|---|
sir |
Șirul în care se caută. |
c / cautat |
Caracterul sau textul căutat. |
Ce returnează
Pointer la prima apariție, sau nullptr.
Exemple
Exemplul 1: Domeniul unei adrese de e-mail
#include <cstdio>
#include <cstring>
int main() {
const char* email = "ana@dexblog.ro";
const char* aron = std::strchr(email, '@');
if (aron != nullptr) {
std::printf("Poziția lui @: %td\n", aron - email);
std::printf("Domeniu: %s\n", aron + 1);
}
}
Rezultat
Poziția lui @: 3
Domeniu: dexblog.ro
Exemplul 2: Căutarea unui cuvânt
#include <cstdio>
#include <cstring>
int main() {
const char* mesaj = "Comanda a fost livrată în Iași";
const char* cuvinte[] = {"livrată", "anulată"};
for (const char* cuv : cuvinte) {
const char* p = std::strstr(mesaj, cuv);
if (p) {
std::printf("\"%s\" găsit la poziția %td\n", cuv, p - mesaj);
} else {
std::printf("\"%s\" nu apare\n", cuv);
}
}
}
Rezultat
"livrată" găsit la poziția 15
"anulată" nu apare
Greșeli frecvente
- Folosești rezultatul fără să verifici
nullptr: dacă textul nu există, accesul prin pointer este comportament nedefinit. - Cauți o literă cu diacritice cu
strchr: „ș” are doi octeți și nu încape într-un singur caracter. Foloseștestrstrcu textul"ș".
Comenzi înrudite
std::string::find: Caută un text și returnează poziția primei (find) sau ultimei (rfind) apariții, ori npos.std::strcmp: Compară două șiruri C: 0 dacă sunt egale, negativ sau pozitiv după ordinea lor.std::strlen: Returnează lungimea unui șir C, numărând octeții până la terminatorul \0.