Ș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
n
caractere dinsource
îndestination
.- Dacă
count
este mai mare decâtsource
se va insera\0
până la count. - Dacă
source
este mai mare decâtcount
nu se va insera\0
la 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
destination
pesource
î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
n
caractere dinsource
îndestination
începând de la\0
.- Dacă
count
este mai mare decâtsource
se 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ă
str1
custr2
. 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
str1
decât înstr2
returnează 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
str1
decât înstr2
returnează 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
str1
cu cele dinstr2
. Continuă până când gasește un caracter diferit, ajunge lacount
sau dă de\0
.- Dacă primul caracter care nu se potrivește are o valoare mai mică în
str1
decât înstr2
returnează 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
str1
decât înstr2
returnează 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ă
c
nu 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ă
c
nu 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ă
str2
nu este găsit, returneazăNULL
. - Dacă dă de
\0
se 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 c
care nu este dindelim
și se termină cu unchar c
dindelim
.- Dacă
str
esteNULL
, 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\0
sau 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ă
true
dacă șirul este gol (lungimea e 0) saufalse
dacă nu este gol.Exemplu
std::string str("Test 123"); std::cout << str.empty(); // Se afisează: false
-
append
string& append (const string& str);
Adaugă
str
la 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 123
Pentru 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 st
Pentru 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 lungimelen
cu noulstr
.Exemplu
std::string str("Test UNKNOWN"); std::string str2("123"); str.replace(5, 7, str2); std::cout << str; // Se afișează: Test 124
Pentru 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ăpos
e 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ă: 16
Pentru 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ăpos
e 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ă: 5
Pentru 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
pos
si are lungimealen
. Dacălen
este 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