ab
Structuri de date
Siruri de caractere
Tipul char[], string, functii uzuale si operatii pe siruri de caractere.
Tipul char[] (sir C)
char s[201]; // sir de maxim 200 caractere
cin >> s; // citeste un cuvant (pana la spatiu)
cin.getline(s, 201); // citeste o linie intreaga
Lungimea:
#include <cstring>
int lung = strlen(s); // nu include '\0'
Accesare: s[0], s[1], …, s[strlen(s)-1]
Tipul string (mai simplu)
#include <string>
string s;
cin >> s;
getline(cin, s); // citeste linie intreaga
int lung = s.length(); // sau s.size()
Operatii string:
s[i] // acces la caracterul i (0-indexed)
s + t // concatenare
s.substr(pos, len) // substring din pozitia pos, lungime len
s.find("abc") // pozitia primei aparitii (string::npos daca nu exista)
s.empty() // true daca sirul e vid
Parcurgere sir
for (int i = 0; i < s.length(); i++)
cout << s[i];
// range-based for:
for (char c : s)
cout << c;
Operatii frecvente
Numarare vocale:
int voc = 0;
for (char c : s)
if (c=='a'||c=='e'||c=='i'||c=='o'||c=='u') voc++;
Conversie litera mare <-> mica:
char mare = toupper(c); // 'a' -> 'A'
char mica = tolower(c); // 'A' -> 'a'
Verificare tip caracter:
isalpha(c) // litera
isdigit(c) // cifra
isupper(c) // litera mare
islower(c) // litera mica
isspace(c) // spatiu/tab/newline
Inversarea unui sir:
// cu string:
reverse(s.begin(), s.end());
// manual:
int n = s.length();
for (int i = 0; i < n / 2; i++)
swap(s[i], s[n - 1 - i]);
Palindrom:
bool palindrom(string s) {
int n = s.length();
for (int i = 0; i < n / 2; i++)
if (s[i] != s[n - 1 - i]) return false;
return true;
}
Comparare siruri
// string: direct cu ==, <, >
if (s == t) ...
if (s < t) ... // ordine lexicografica
// char[]: foloseste strcmp
if (strcmp(s, t) == 0) ... // egale
if (strcmp(s, t) < 0) ... // s < t lexicografic
Conversie cifra <-> caracter
char c = '7';
int cifra = c - '0'; // 7 (int)
int n = 5;
char ch = '0' + n; // '5' (char)
La examen
- Sirul char[] se termina cu
'\0'(null terminator) — nu scrie acolo - Foloseste
stringdaca nu se cere explicitchar[]— e mai simplu s.find(...)returneazastring::npos(valoare mare) daca nu gaseste — verifica intotdeauna- Indexare
stringincepe de la 0