Șiruri de caractere
Șirurile de caractere pot fi manipulate în cpp cu ajutorul librăriilor precum <cstring> și <string>. <cstring> oferă mai multe funții ce pot modifica direct un șir de caractere, în timp ce <string> este în sine o clasă cu interfață.
Caracterele sunt în esență doar niște numere, care sunt apoi interpretate de un standard de cod precum UTF-8 și reprezentate ca și caractere.
<cstring>
Pentru a declara un șir liniar de caractere putem sa folosim un vector normal sau un pointer de tip char, practic echivalentul său. Citirea se realizează normal, într-un vector de caractere. Atunci când afișăm un vector de caractere str, putem apela cout << str;, iar caracterele din vector se vor afișa până când caracterul \0 este atins.
\0 este folosit pentru a semnala că un șir s-a finalizat. Deoarece calculatoarele sunt nevoite să parcurgă liniar seturile de memorie, acest caracter practic îi spune calculatorului să ignore ce a mai rămas în setul de memorie dupa caracterul \0.
Exemplu
char s[55] = "abcdemlc";
str[5] = '\0';
cout << str;
// Se afișează abcde
Funcții
strcpy | strncpy | strcat | strncat | strcmp | strncmp | strchr | strrchr | strstr | strtok | strlen
-
strcpy
char * strcpy (char * destination, const char * source);Îl copiază pe
sourceîndestination.Exemplu
char destination[55]; char source[55] = "bac 2024"; strcpy(destination, source); // destination = "bac 2024" -
strncpy
char * strncpy (char * destination, const char * source, int count);Copiază primele
ncaractere dinsourceîndestination.- Dacă
counteste mai mare decâtsourcese va insera\0până la count. - Dacă
sourceeste mai mare decâtcountnu se va insera\0la final.
Exemplu
char destination[55]; char source[55] = "bac 2024"; int count = 3; strncpy(destination, source, count); // destination = "bac" - Dacă
-
strcat
char * strcat (char * destination, const char * source);Îl concatenează în
destinationpesourceîncepând de la primul\0.Exemplu
char destination[55] = "bac "; char source[55] = "2024"; strcat(destination, source); // destination = "bac 2024" -
strncat
char * strncat (char * destination, const char * source, int count);Concatenează primele
ncaractere dinsourceîndestinationîncepând de la\0.- Dacă
counteste mai mare decâtsourcese va copia până la\0.
Exemplu
char destination[55] = "bac"; char source[55] = " 2024567"; int count = 5; strncat(destination, source, count); // destination = "bac 2024" - Dacă
-
strcmp
int strcmp (char * str1, const char * str2);Compară
str1custr2. Continuă până când gasește un caracter diferit sau dă de\0.- Dacă primul caracter care nu se potrivește are o valoare mai mică în
str1decât înstr2returnează o valoare< 0. - Dacă cele două șiruri sunt egale returnează
0. - Dacă primul caracter care nu se potrivește are o valoare mai mare în
str1decât înstr2returnează o valoare> 0.
Exemplu
char str1[55] = "abbeb ca"; char str2[55] = "bbc"; strcmp(str1, str2); // ('e' - 'c') = 2 - Dacă primul caracter care nu se potrivește are o valoare mai mică în
-
strncmp
int strncmp (char * str1, const char * str2, int count);Compară până la n caractere din
str1cu cele dinstr2. Continuă până când gasește un caracter diferit, ajunge lacountsau dă de\0.- Dacă primul caracter care nu se potrivește are o valoare mai mică în
str1decât înstr2returnează o valoare< 0. - Dacă cele două șiruri sunt egale returnează
0. - Dacă primul caracter care nu se potrivește are o valoare mai mare în
str1decât înstr2returnează o valoare> 0.
Exemplu
char str1[55] = "abbeb ca"; char str2[55] = "bbxx"; int count = 2; strncmp(str1, str2, count); // 0 - Dacă primul caracter care nu se potrivește are o valoare mai mică în
-
strchr
char * strchr (char * str, char c);Returnează un pointer către prima apariție a lui
cînstr.- Dacă
cnu este găsit, returneazăNULL.
Exemplu
char str[55] = "bac scoala 2024"; char c = 'a'; strchr(str, c); // "ac scoala 2024" - Dacă
-
strrchr
char * strrchr (char * str, char c);Returnează un pointer către ultima apariție a lui
cînstr.- Dacă
cnu este găsit, returneazăNULL.
Exemplu
char str[55] = "bac scoala 2024"; char c = 'a'; strrchr(str, c); // "a 2024" - Dacă
-
strstr
char * strstr (char * str1, char * str2);Returnează un pointer către prima apariție a lui
str2înstr1.- Dacă
str2nu este găsit, returneazăNULL. - Dacă dă de
\0se oprește.
Exemplu
char str1[55] = "bac scoala 2024"; char str2[55] = "20"; strstr(str1, str2); // "2024" - Dacă
-
strtok
char * strtok (char * str, char * delim);Caută prima secvență care începe cu un
char ccare nu este dindelimși se termină cu unchar cdindelim.- Dacă
stresteNULL, continuă de unde a rămas din invocarea anterioară. - Dacă nu mai găsește, returnează
NULL.
Exemplu
char str[50] = " Da. Probabil? De_bună_seamă!:)"; char delim[10] = "!?.,-;() "; strtok(str, delim); // "Da" strtok(NULL, delim); // "Probabil" strtok(NULL, delim); // "De_bună_seamă" strtok(NULL, delim); // "NULL" - Dacă
-
strlen
int strlen (const char * str);Returnează lungimea lui
str, adică atunci când întâlnește caracterul\0.
Exempluchar s[55] = "Bac2024"; strlen(s); // 7
<string>
Un obiect de tip string reprezintă o secventă de caractere. Clasa string oferă o interrfață prin care obiectele pot fi manipulate. În acest caz, șirurile sunt alocate dinamic, acest lucru putând să afecteze timpul de execuție.
Exemplu
string str = "amomogas";
cout << str;
// Se afișează amomogas
Funcții
size | length | resize | clear | empty | append | insert | replace | push_back | pop_back | find | rfind | substr
-
size / length
size_t size() const; size_t length() const;Returnează mărimea șirului în bytes (1 char = 1 byte).
Exemplu
std::string str("Test 123"); std::cout << str.size(); // Se afisează: 8 -
resize
void resize (size_t n); void resize (size_t n, char c);Schimbă mărimea stringului să fie egală cu
n. Dacă șirul este mai mare, celelalte caractere sunt eliminate, dacă este mai mic, spațiile libere se umplu cu caracterul\0sau cu parametrulc.Exemplu
std::string str("Test 123"); unsigned size = str.size(); str.resize(size + 2, 'a'); std::cout << str; // Se afisează: Test 123aa -
clear
void clear();Șterge întreg conținutul șirului, lungimea acestuia devenind 0.
Exemplu
std::string str("Test 123"); str.clear(); std::cout << str; // Se afisează: -
empty
bool empty() const;Returnează
truedacă șirul este gol (lungimea e 0) saufalsedacă nu este gol.Exemplu
std::string str("Test 123"); std::cout << str.empty(); // Se afisează: false -
append
string& append (const string& str);Adaugă
strla stringul inițial, mărindui lungimea cu lungimea luistr.Exemplu
std::string str("Test"); std::string str2("123"); str.append(str2); std::cout << str; // Se afișează: Test 123Pentru mai multe, a se consulta documentația.
-
insert
string& insert (size_t pos, const string& str);Inserează stringul
strîn stringul inițial, la poziția specificată.Exemplu
std::string str("Test"); std::string str2(" 123 "); str.insert(3, str2); std::cout << str; // Se afișează: Te 123 stPentru mai multe, a se consulta documentația.
-
replace
string& replace (size_t pos, size_t len, const string& str);Schimbă o porțiune din string care începe la
posși are o lungimelencu noulstr.Exemplu
std::string str("Test UNKNOWN"); std::string str2("123"); str.replace(5, 7, str2); std::cout << str; // Se afișează: Test 124Pentru mai multe, a se consulta documentația.
-
push_back
void push_back (char c);Adaugă un caracter la finalul șirului, mărindu-i lungimea cu 1.
Exemplu
std::string str("Test 123"); str.push_back('4'); std::cout << str; // Se afisează: Test 1234 -
pop_back
void pop_back();Șterge un caracter de la finalul șirului, micșorându-i lungimea cu 1
Exemplu
std::string str("Test 123"); str.pop_back(); std::cout << str; // Se afisează: Test 12 -
find
size_t find (const string& str, size_t pos = 0) const; size_t find (const char* s, size_t pos = 0) const; size_t find (const char* s, size_t pos, size_t n) const; size_t find (char c, size_t pos = 0) const;Caută prima apariție a lui
strîntr-un string și returnează poziția sa de început. Dacăpose specificat, atunci caută după, inclusiv, de la pozițiapos.Exemplu
std::string str("pere mere prune mere"); std::string str2("mere"); std::size_t index = str.find(str2, 11); std::cout << index; // Se afișează: 16Pentru mai multe, a se consulta documentația.
-
rfind
size_t rfind (const string& str, size_t pos = npos) const; size_t rfind (const char* s, size_t pos = npos) const; size_t rfind (const char* s, size_t pos, size_t n) const; size_t rfind (char c, size_t pos = npos) const;Caută ultima apariție a lui
strîntr-un string și returnează poziția sa de început. Dacăpose specificat, atunci caută înainte, inclusiv, de la pozițiapos.Exemplu
std::string str("pere mere prune mere"); std::string str2("mere"); std::size_t index = str.find(str2, 11); std::cout << index; // Se afișează: 5Pentru mai multe, a se consulta documentația.
-
substr
string substr (size_t pos = 0, size_t len = npos) const;Returnează un alt șir construit pe baza celui inițial inițializat ca o copie a unui subșir al șirului inițial care începe de la poziția
possi are lungimealen. Dacăleneste lăsat liber, se va considera finalul șirului inițial.Exemplu
std::string str("Cram School Pass 2024!"); std::string newStr = str.substr(0, 11); std::cout << newStr; // Se afisează: Cram School