Până acum am lucrat cu tipuri numerice — int, long long, float. Tehnologia a avut însă nevoie și de litere: așa s-a născut tipul char. Iar un șir de caractere? E doar un vector de char-uri — exact ce știi de la vectori (clasa a IX-a).
Un char stochează un număr de la 0 la 127 — iar fiecărui număr îi corespunde un simbol. Calculatorul nu știe litere: știe doar coduri.
Declari un vector de char-uri, iar C++ marchează sfârșitul textului cu un caracter invizibil: '\0' (codul 0).
cin >> cuvant;
Regulile lui cin: sare caracterele albe de la început, citește de la primul caracter ne-alb și se oprește la primul spațiu.
cin.getline(s, nr);
Citește maxim nr−1 caractere (locul lui '\0'!) și se oprește la '\n' (Enter) — deci ia tot rândul, cu spații cu tot.
Trusa completă pentru șiruri C-style. Observație importantă: aceste funcții primesc de fapt un pointer către începutul șirului — de aceea merge magia cu s+i.
Returnează lungimea (fără '\0').
Copiază sursa în destinație — echivalentul lui x = y (care NU merge pe șiruri!). strncpy copiază doar primele n caractere.
Lipește sursa la sfârșitul destinației. strncat lipește doar primele n caractere.
< 0 dacă s1 vine înaintea lui s2 (alfabetic/lexicografic), 0 dacă sunt identice, > 0 altfel. strncmp compară doar primele n.
Pointer către PRIMA apariție a caracterului c — adică sufixul care începe acolo. NULL dacă nu există.
Pointer către prima apariție a subșirului — sufixul de la acea poziție. NULL dacă nu există.
„Sparge" șirul în bucăți (token-uri) după separatori. Primul apel primește șirul; apelurile următoare primesc NULL. Perfect pentru cuvintele unei propoziții.
Pentru că funcțiile primesc pointeri, s + i înseamnă „șirul care începe la poziția i". Copiind peste el șirul de la poziția j, elimini caracterele dintre i și j. Așa se șterge un caracter la BAC!
# numărarea vocalelor — cu strchr
# cenzurarea unui cuvânt — cu strstr
Alternativa modernă la char[]: clasa string cu metodele ei — plus testele și conversiile pe caractere individuale.
Numărul de caractere — identice.
Subșir de len caractere de la poziția pos (0-indexat). Fără len: tot restul.
Poziția primei apariții — sau string::npos dacă nu există.
Șterge len de la pos · inserează la pos · înlocuiește len caractere cu alt text.
+ creează un string nou; += modifică direct. La string, „=" CHIAR funcționează — spre deosebire de char[]!
Număr → string · string → int. Trucul s[i] - '0' merge și aici.
isdigit, isalpha, isalnum, isupper, islower, isspace — nenul = adevărat.
toupper / tolower — dacă nu e literă, îl lasă neschimbat.
Problemele clasice de șiruri, exact tipul care pică la BAC și la olimpiadă. Fiecare aplică o funcție din lecție.
Întrebări cu cod, exact în stilul subiectelor. Alege un răspuns la fiecare — vezi imediat explicația.
Ce trebuie să reții din acest modul.