Ș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
Îl copiază pechar * strcpy (char * destination, const char * source);sourceîndestination.
Exemplu
char destination[55]; char source[55] = "bac 2024"; strcpy(destination, source); // destination = "bac 2024" -
strncpy
Copiază primelechar * strncpy (char * destination, const char * source, int count);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
Îl concatenează închar * strcat (char * destination, const char * source);destinationpesourceîncepând de la primul\0.
Exemplu
char destination[55] = "bac "; char source[55] = "2024"; strcat(destination, source); // destination = "bac 2024" -
strncat
Concatenează primelechar * strncat (char * destination, const char * source, int count);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
Comparăint strcmp (char * str1, const char * str2);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
Compară până la n caractere dinint strncmp (char * str1, const char * str2, int count);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
Returnează un pointer către prima apariție a luichar * strchr (char * str, char c);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
Returnează un pointer către ultima apariție a luichar * strrchr (char * str, char c);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
Returnează un pointer către prima apariție a luichar * strstr (char * str1, char * str2);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
Caută prima secvență care începe cu unchar * strtok (char * str, char * delim);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
Returnează lungimea luiint strlen (const char * str);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
Returnează mărimea șirului în bytes (1 char = 1 byte).size_t size() const; size_t length() const;Exemplu
std::string str("Test 123"); std::cout << str.size(); // Se afisează: 8 -
resize
Schimbă mărimea stringului să fie egală cuvoid resize (size_t n); void resize (size_t n, char c);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
Șterge întreg conținutul șirului, lungimea acestuia devenind 0.void clear();Exemplu
std::string str("Test 123"); str.clear(); std::cout << str; // Se afisează: -
empty
Returneazăbool empty() const;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
Adaugăstring& append (const string& str);strla stringul inițial, mărindui lungimea cu lungimea luistr.Exemplu
Pentru mai multe, a se consulta documentația.std::string str("Test"); std::string str2("123"); str.append(str2); std::cout << str; // Se afișează: Test 123 -
insert
Inserează stringulstring& insert (size_t pos, const string& str);strîn stringul inițial, la poziția specificată.Exemplu
Pentru mai multe, a se consulta documentația.std::string str("Test"); std::string str2(" 123 "); str.insert(3, str2); std::cout << str; // Se afișează: Te 123 st -
replace
Schimbă o porțiune din string care începe lastring& replace (size_t pos, size_t len, const string& str);posși are o lungimelencu noulstr.Exemplu
Pentru mai multe, a se consulta documentația.std::string str("Test UNKNOWN"); std::string str2("123"); str.replace(5, 7, str2); std::cout << str; // Se afișează: Test 124 -
push_back
Adaugă un caracter la finalul șirului, mărindu-i lungimea cu 1.void push_back (char c);Exemplu
std::string str("Test 123"); str.push_back('4'); std::cout << str; // Se afisează: Test 1234 -
pop_back
Șterge un caracter de la finalul șirului, micșorându-i lungimea cu 1void pop_back();Exemplu
std::string str("Test 123"); str.pop_back(); std::cout << str; // Se afisează: Test 12 -
find
Caută prima apariție a luisize_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;strîntr-un string și returnează poziția sa de început. Dacăpose specificat, atunci caută după, inclusiv, de la pozițiapos.Exemplu
Pentru mai multe, a se consulta documentația.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ă: 16 -
rfind
Caută ultima apariție a luisize_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;strîntr-un string și returnează poziția sa de început. Dacăpose specificat, atunci caută înainte, inclusiv, de la pozițiapos.Exemplu
Pentru mai multe, a se consulta documentația.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ă: 5 -
substr
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țiastring substr (size_t pos = 0, size_t len = npos) const;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