Introducere în șiruri de caractere
A. Caracterele
Un caracter este o literă, cifră sau simbol, stocat într-o variabilă de tip char (1 byte).
Se scrie între ghilimele simple ' '. Exemple:
char c = 'A';
char d = 'z';
char cifra = '5';
Citire caracter:
char c;
cin >> c;
B. Șirurile de caractere
Un șir de caractere este o succesiune de caractere terminată cu '\0' (NULL). Se declară ca tablou de caractere.
char s[20]; // șir de maxim 19 caractere + '\0'
strcpy(s, "albina"); // inițializare cu strcpy
Exemplu important:
char s[20];
s[0] = 'a';
s[1] = 'n';
s[2] = 'a';
// șirul este incomplet, nu știm unde se termină
s[3] = '\0'; // acum șirul este "ana"
C. Citirea șirurilor
1. Citire simplă (fără spații):
cin >> s;
→ citește până la primul spațiu.
2. Citire completă (cu spații):
cin.getline(s, numar_maxim + 1);
→ citește inclusiv spațiile până la ENTER sau până la limita de caractere.
3. Forma compusă:
cin.getline(s, numar_maxim + 1, caracter_sfarsit);
Exemplu 1 (cu caracter de sfârșit):
char s[50];
cin.getline(s, 50, '.');
// Intrare: Ana are mere. Si pere.
// Rezultat: "Ana are mere"
Exemplu 2 (fără caracter de sfârșit, doar până la ENTER):
char s[50];
cin.getline(s, 50);
// Intrare: Ana are mere. Si pere.
// Rezultat: "Ana are mere. Si pere."
D. Codurile ASCII
Fiecare caracter are un cod numeric conform tabelului ASCII.
- Litere mari:
'A' = 65,'B' = 66, ...,'Z' = 90 - Litere mici:
'a' = 97,'b' = 98, ...,'z' = 122 - Cifre:
'0' = 48, ...,'9' = 57
E. Legătura dintre șiruri și pointeri
Pentru char s[] = "albina"; șirul este:
Index | Caracter | Expresie | Valoare
0 | 'a' | *(s+0) | 'a'
1 | 'l' | *(s+1) | 'l'
2 | 'b' | *(s+2) | 'b'
3 | 'i' | *(s+3) | 'i'
4 | 'n' | *(s+4) | 'n'
5 | 'a' | *(s+5) | 'a'
6 | '\0' | *(s+6) | '\0'
Afișări cu cout:
cout << s; // albina
cout << s+1; // lbina
cout << s+2; // bina
cout << s+3; // ina
cout << s+6; // șir gol
F. Eliminarea unui caracter
Pentru șirul "albina", vrem să eliminăm litera 'b' (de pe poziția 2):
char s[] = "albina";
int i = 2; // indexul lui 'b'
strcpy(s + i, s + i + 1);
cout << s; // alina
Instrucțiunea strcpy(s+i, s+i+1) copiază toate caracterele după poziția i peste caracterul de pe poziția i.
Funcții pentru șiruri de caractere
Funcțiile pentru șiruri se găsesc în librăria <string.h> (sau <cstring> în C++).
1. strlen
Prototip: int strlen(char sir[]);
Returnează: lungimea efectivă a șirului (fără caracterul nul '\0').
char a[50] = "ora de informatica";
cout << strlen(a); // 18
char b[] = "abcde";
cout << strlen(b); // 5
2. strcpy
Prototip: char* strcpy(char destinatie[], const char sursa[]);
Rol: copiază conținutul șirului sursa în destinatie.
char a[20], b[20] = "Test";
strcpy(a, b);
cout << a; // Test
char x[30];
strcpy(x, "C++ este simplu");
cout << x; // C++ este simplu
3. strcat
Prototip: char* strcat(char dest[], const char sursa[]);
Rol: adaugă la șirul dest conținutul lui sursa.
char a[30] = "Info";
strcat(a, "matica");
cout << a; // Informatica
char x[30] = "C++ ";
char y[] = "rocks";
strcat(x, y);
cout << x; // C++ rocks
4. strncpy
Prototip: char* strncpy(char destinatie[], const char sursa[], size_t n);
Rol: copiază primele n caractere din sursa în destinatie. Dacă sursa are mai puțin de n caractere, restul se completează cu '\0'.
char a[20];
strncpy(a, "informatica", 5);
a[5] = '\0'; // adăugăm manual terminator
cout << a; // infor
char b[20];
strncpy(b, "C++", 10);
cout << b; // C++ (restul completat cu '\0')
5. strncat
Prototip: char* strncat(char dest[], const char sursa[], size_t n);
Rol: adaugă la șirul dest primele n caractere din sursa.
char a[30] = "Info";
strncat(a, "matica123", 7);
cout << a; // Informatica
char x[20] = "ABC";
char y[] = "DEF";
strncat(x, y, 2);
cout << x; // ABCDE
6. strchr
Prototip: char* strchr(const char sir[], int c);
Rol: caută prima apariție a caracterului c în șirul sir.
char s[] = "informatica";
cout << strchr(s, 'a'); // atica
char t[] = "programare";
char* p = strchr(t, 'g');
cout << p - t; // 3 (pozitia)
7. strrchr
Prototip: char* strrchr(const char sir[], int c);
Rol: caută ultima apariție a caracterului c în șirul sir.
char s[] = "banana";
cout << strrchr(s, 'a'); // a
char t[] = "informatica";
char* p = strrchr(t, 'a');
cout << p - t; // 10 (ultima pozitie)
8. strcmp
Prototip: int strcmp(const char s1[], const char s2[]);
Rol: compară două șiruri (sensibil la litere mari/mici).
cout << strcmp("abc", "abd"); // < 0
cout << strcmp("Test", "Test"); // 0
9. stricmp
Prototip: int stricmp(const char s1[], const char s2[]);
Rol: compară două șiruri fără a ține cont de litere mari/mici.
cout << stricmp("abc", "ABC"); // 0
cout << stricmp("Test", "tesu"); // < 0
10. strstr
Prototip: char* strstr(const char sir[], const char subsir[]);
Rol: caută șirul subsir în sir.
char s[] = "informatica";
cout << strstr(s, "mat"); // matica
char t[] = "C++ este usor";
if (strstr(t, "usor")) cout << "Gasit";
11. strtok
Prototip: char* strtok(char sir[], const char sep[]);
Rol: separă un șir în „cuvinte” după separatori.
char s[] = "Ana are mere";
char* p = strtok(s, " ");
while (p) {
cout << p << "\n";
p = strtok(NULL, " ");
}
char t[] = "1,2;3.4";
char* q = strtok(t, ",;.");
while (q) {
cout << q << "\n";
q = strtok(NULL, ",;.");
}
12. strspn
Prototip: size_t strspn(const char s1[], const char s2[]);
Rol: returnează numărul de caractere consecutive din s1 aflate în s2.
cout << strspn("AB2def", "1B3AQW"); // 2
cout << strspn("FAB2def", "16A32BF"); // 0
13. strcspn
Prototip: size_t strcspn(const char s1[], const char s2[]);
Rol: returnează numărul de caractere consecutive din s1 care nu se află în s2.
cout << strcspn("AB2def", "123"); // 2
cout << strcspn("hello", "aeiou"); // 1
14. strlwr
Prototip: char* strlwr(char sir[]);
Rol: transformă toate literele mari în litere mici.
char s[] = "InFo";
cout << strlwr(s); // info
char t[] = "HELLO";
cout << strlwr(t); // hello
15. strupr
Prototip: char* strupr(char sir[]);
Rol: transformă toate literele mici în litere mari.
char s[] = "hello";
cout << strupr(s); // HELLO
char t[] = "Test";
cout << strupr(t); // TEST
16. strbrk
Prototip: char* strpbrk(const char s1[], const char s2[]);
Rol: caută primul caracter din s1 care se găsește și în s2.
char s[] = "informatica";
cout << strpbrk(s, "xyzai"); // arată "atica"
char t[] = "programare";
if (strpbrk(t, "123")) cout << "Gasit cifra";
17. atof
Prototip: double atof(const char sir[]);
Rol: convertește șirul la tipul double.
cout << atof("3.14"); // 3.14
cout << atof("12abc"); // 12
18. _atold
Prototip: long double _atold(const char sir[]);
Rol: convertește șirul la long double.
cout << _atold("12345.6789");
cout << _atold("7.5abc"); // 7.5
19. atoi
Prototip: int atoi(const char sir[]);
Rol: convertește șirul la întreg (int).
cout << atoi("123"); // 123
cout << atoi("45xyz"); // 45
20. atol
Prototip: long atol(const char sir[]);
Rol: convertește șirul la întreg lung (long).
cout << atol("123456"); // 123456
cout << atol("999abc"); // 999
21. itoa
Prototip: char* itoa(int valoare, char sir[], int baza);
Rol: convertește un int în șir, în baza specificată.
char buf[20];
itoa(255, buf, 10);
cout << buf; // 255
itoa(255, buf, 16);
cout << buf; // ff
22. ltoa
Prototip: char* ltoa(long valoare, char sir[], int baza);
Rol: convertește un long în șir.
char buf[30];
ltoa(1234567, buf, 10);
cout << buf; // 1234567
ltoa(255, buf, 2);
cout << buf; // 11111111
23. ultoa
Prototip: char* ultoa(unsigned long valoare, char sir[], int baza);
Rol: convertește un unsigned long în șir.
char buf[30];
ultoa(4000000000, buf, 10);
cout << buf; // 4000000000
ultoa(255, buf, 8);
cout << buf; // 377
Probleme rezolvate
Problema 1
Enunț: Se citește de la tastatură un șir de caractere format din litere mici. Să se determine lungimea acestuia și să se afișeze numărul de vocale conținute.
Exemplu:
Intrare: informatica
Ieșire: Lungimea sirului este 11
Numarul de vocale este 5
Variabile:
char sir[256]– șirul citit;int lungime– lungimea șirului (fără caracterul terminator'\0');int vocale– contor pentru numărul de vocale.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir[256];
cin.getline(sir, 256);
int lungime = strlen(sir);
int vocale = 0;
for (int i = 0; i < lungime; i++) {
if (strchr("aeiou", sir[i])) vocale++;
}
cout << "Lungimea sirului este " << lungime << endl;
cout << "Numarul de vocale este " << vocale << endl;
return 0;
}
Problema 2
Enunț: Se citesc de la tastatură două șiruri de caractere. Să se verifice dacă cele două șiruri sunt identice (ținând cont de litere mari și mici).
Exemplu:
Intrare: s1 = programare
s2 = programare
Ieșire: Sirurile sunt identice
Exemplu:
Intrare: s1 = Ana
s2 = ana
Ieșire: Sirurile NU sunt identice
Variabile:
char s1[256], s2[256]– cele două șiruri citite;int rezultat– valoarea returnată de funcțiastrcmp.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s1[256], s2[256];
cin.getline(s1, 256);
cin.getline(s2, 256);
int rezultat = strcmp(s1, s2);
if (rezultat == 0)
cout << "Sirurile sunt identice" << endl;
else
cout << "Sirurile NU sunt identice" << endl;
return 0;
}
Exerciții propuse
Problema 1: Se citește de la tastatura un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să afișeze lungimea șirului s.
Exemplu:
Intrare: informatica
Ieșire: Lungimea sirului este 11
Problema 2: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să numere câte vocale conține șirul s.
Exemplu:
Intrare: programare
Ieșire: Numarul de vocale este 4
Problema 3: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine câte litere mari conține șirul s.
Exemplu:
Intrare: InfoMatica
Ieșire: Numarul de litere mari este 2
Problema 4: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine câte litere mici conține șirul s.
Exemplu:
Intrare: InfoMatica
Ieșire: Numarul de litere mici este 8
Problema 5: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine câte cifre conține șirul s.
Exemplu:
Intrare: Curs2023
Ieșire: Numarul de cifre este 4
Problema 6: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine câte caractere speciale (care nu sunt litere sau cifre) conține șirul s.
Exemplu:
Intrare: Info@2023!
Ieșire: Numarul de caractere speciale este 2
Problema 7: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să afișeze șirul s scris invers.
Exemplu:
Intrare: informatica
Ieșire: acitamrofni
Problema 8: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să transforme toate literele mari din șirul s în litere mici.
Exemplu:
Intrare: InfoMaTiCa
Ieșire: informatica
Problema 9: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să transforme toate literele mici din șirul s în litere mari.
Exemplu:
Intrare: InfoMaTiCa
Ieșire: INFOMATICA
Problema 10: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere și un caracter c. Scrieți un program C++ care să determine de câte ori apare caracterul c în șirul s.
Exemplu:
Intrare: s = programare, c = r
Ieșire: Caracterul apare de 2 ori
Problema 11: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine dacă șirul s este palindrom (se citește la fel de la stânga la dreapta și de la dreapta la stânga).
Exemplu:
Intrare: radar
Ieșire: Sirul este palindrom
Problema 12: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere și un caracter c. Scrieți un program C++ care să determine poziția primei apariții a caracterului c în șirul s. Dacă caracterul nu apare, se va afișa mesajul „Caracterul nu există în șir”.
Exemplu:
Intrare: s = informatica, c = t
Ieșire: Caracterul se află pe poziția 8
Problema 13: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să înlocuiască toate spațiile din șirul s cu caracterul „_”.
Exemplu:
Intrare: ora de info
Ieșire: ora_de_info
Problema 14: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine câte cuvinte conține șirul s (separarea cuvintelor se face prin spațiu).
Exemplu:
Intrare: ora de informatica
Ieșire: Sirul contine 3 cuvinte
Problema 15: Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Scrieți un program C++ care să determine cuvântul cel mai lung din șirul s și să afișeze acest cuvânt.
Exemplu:
Intrare: ora de informatica
Ieșire: Cuvantul cel mai lung este informatica
Problema 16
Se citește de la tastatură un șir de caractere s de maxim 253 de caractere. Determinați dacă șirul s este palindrom (se citește la fel de la stânga la dreapta și de la dreapta la stânga).
Exemplu:
Intrare: radar Ieșire: Sirul este palindrom
Problema 17
Se citește un șir s de maxim 253 de caractere și un caracter c. Determinați poziția primei apariții a caracterului c în șirul s. Dacă caracterul nu apare, afișați mesajul „Caracterul nu există în șir”.
Exemplu:
Intrare: s = informatica, c = t Ieșire: Caracterul se află pe poziția 8
Problema 18
Se citește un șir s de maxim 253 de caractere. Înlocuiți toate spațiile cu caracterul „_”.
Exemplu:
Intrare: ora de info Ieșire: ora_de_info
Problema 19
Se citește un șir s de maxim 253 de caractere. Determinați câte cuvinte conține șirul s (cuvintele sunt separate prin spațiu).
Exemplu:
Intrare: ora de informatica Ieșire: Sirul contine 3 cuvinte
Problema 20
Se citește un șir s de maxim 253 de caractere. Determinați cuvântul cel mai lung din șir și afișați-l.
Exemplu:
Intrare: ora de informatica Ieșire: Cuvantul cel mai lung este informatica
Problema 21
Se citește un șir s de maxim 253 de caractere. Determinați câte litere „a” conține șirul.
Exemplu:
Intrare: alina Ieșire: Numarul de litere 'a' este 2
Problema 22
Se citește un șir s de maxim 253 de caractere. Determinați câte litere „e” conține șirul.
Exemplu:
Intrare: elevi Ieșire: Numarul de litere 'e' este 2
Problema 23
Se citește un șir s de maxim 253 de caractere. Determinați câte spații conține șirul.
Exemplu:
Intrare: ora de informatica Ieșire: Numarul de spatii este 2
Problema 24
Se citește un șir s de maxim 253 de caractere. Determinați dacă șirul începe cu litera „a”.
Exemplu:
Intrare: alina Ieșire: Sirul incepe cu litera 'a'
Problema 25
Se citește un șir s de maxim 253 de caractere. Determinați dacă șirul se termină cu litera „a”.
Exemplu:
Intrare: alina Ieșire: Sirul se termina cu litera 'a'
Problema 26
Se citește un șir s de maxim 253 de caractere. Determinați câte cifre conține șirul.
Exemplu:
Intrare: Curs2023 Ieșire: Numarul de cifre este 4
Problema 27
Se citește un șir s de maxim 253 de caractere. Determinați câte litere mari conține șirul.
Exemplu:
Intrare: InfoMatica Ieșire: Numarul de litere mari este 2
Problema 28
Se citește un șir s de maxim 253 de caractere. Determinați câte litere mici conține șirul.
Exemplu:
Intrare: InfoMatica Ieșire: Numarul de litere mici este 8
Problema 29
Se citește un șir s de maxim 253 de caractere. Determinați câte caractere speciale conține șirul (litere sau cifre exclusiv).
Exemplu:
Intrare: Info@2023! Ieșire: Numarul de caractere speciale este 2
Problema 30
Se citește un șir s de maxim 253 de caractere. Afișați șirul inversat.
Exemplu:
Intrare: informatica Ieșire: acitamrofni
Problema 31
Se citește un șir s de maxim 253 de caractere. Transformă toate literele mari în litere mici.
Exemplu:
Intrare: InfoMaTiCa Ieșire: informatica
Problema 32
Se citește un șir s de maxim 253 de caractere. Transformă toate literele mici în litere mari.
Exemplu:
Intrare: InfoMaTiCa Ieșire: INFOMATICA
Problema 33
Se citește un șir s și un caracter c. Determinați de câte ori apare caracterul c în șirul s.
Exemplu:
Intrare: s = programare, c = r Ieșire: Caracterul apare de 2 ori
Problema 34
Se citește un șir s. Înlocuiți toate aparițiile unui caracter c cu caracterul *. Dacă caracterul nu există, afișați mesajul „NU APARE”.
Exemplu:
Intrare: s = informatica, c = i Ieșire: *nformat*ca
Problema 35
Se citește un șir s și un cuvânt w. Afișați șirul s inserând caracterul ? după fiecare apariție a cuvântului w. Dacă w nu apare, afișați „NU APARE”.
Exemplu:
Intrare: s = examenului examenul de bacalaureat, w = examenul Ieșire: examenului examenul? de bacalaureat si examenul?
Problema 36
Se citește un șir s. Înserțiți caracterul * după fiecare vocala din șir.
Exemplu:
Intrare: s = examenul Ieșire: e*xa*me*nu*l
Problema 37
Se citește un cuvânt format din litere mici. Interșimbați prima consoană cu ultima vocală. Dacă nu există consoane sau vocale, afișați „IMPOSIBIL”.
Exemplu:
Intrare: s = marmorat Ieșire: aarmorMt
Problema 38
Se citesc 3 cuvinte s, a, b. Înlocuiți toate aparițiile lui a în s cu b. a și b au aceeași lungime.
Exemplu:
Intrare: s = abracadabra, a = bra, b = xyz Ieșire: axyzcadaxyz
Problema 39
Se citesc două cuvinte a și b. Determinați dacă b apare o singură dată în a.
Exemplu:
Intrare: a = anamaria, b = ana Ieșire: nu
Problema 40
Se citesc n cuvinte. Numărați câte sunt anagrame ale primului cuvânt citit.
Exemplu:
Intrare: n = 5, cuvinte: ion, noi, nio, ana, noi Ieșire: 3
Problema 41
Se citește un text. Afișați câte cuvinte încep și se termină cu vocale.
Exemplu:
Intrare: Ana are opt mere Ieșire: 2
Problema 42
Se citește un cuvânt s. Afișați toate sufixele lui în ordinea crescătoare a lungimii.
Exemplu:
Intrare: s = alina Ieșire: a na ina lina alina
Problema 43
Se citesc două șiruri de cifre foarte mari. Determinați care are mai multe cifre.
Exemplu:
Intrare: a = 123456789, b = 98765 Ieșire: a are mai multe cifre
Problema 44
Se citește un cuvânt. Ștergeți toate perechile de litere alăturate identice, repetând până nu mai există perechi.
Exemplu:
Intrare: abbapxsiisxh Ieșire: ph
Problema 45
Se citește un cuvânt. Ștergeți toate consoanele din el.
Exemplu:
Intrare: algoritm Ieșire: aoi
Problema 46
Se citește un cuvânt. Afișați toate cuvintele obținute prin eliminarea unei singure litere.
Exemplu:
Intrare: s = alin Ieșire: lin ain aln ali
Problema 47
Se citesc două cuvinte a și b. Determinați dacă unul este sufix al celuilalt.
Exemplu:
Intrare: a = ana, b = diana Ieșire: da
Problema 48
Se citesc două cuvinte. Determinați dacă „rimează” (sufixul de la ultima vocală este identic).
Exemplu:
Intrare: a = Diana, b = Sana Ieșire: da
Problema 49
Se citesc două cuvinte. Determinați dacă sunt anagrame.
Exemplu:
Intrare: a = ana, b = naa Ieșire: da
Problema 50
Se citește un text. Înlocuiți fiecare literă cu următoarea din alfabet (z → a).
Exemplu:
Intrare: ana are mere Ieșire: bob bsf nfsf
Problema 51
Se citește un șir de caractere. Determinați dacă șirul conține cel puțin două cuvinte identice (spațiile separă cuvintele).
Exemplu:
Exemplu 1: Intrare: "ana are ana mere" Ieșire: Da Exemplu 2: Intrare: "mere si pere" Ieșire: Nu
Rezolvare C++:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[255];
cin.getline(s, 255);
char copie[255];
strcpy(copie, s);
char *p = strtok(copie, " ");
int gasit = 0;
while(p != NULL) {
char *q = p;
char *r = strtok(NULL, " ");
while(r != NULL) {
if(strcmp(p, r) == 0) gasit = 1;
r = strtok(NULL, " ");
}
p = strtok(NULL, " ");
}
if(gasit) cout << "Da";
else cout << "Nu";
return 0;
}
Problema 52
Se citește un șir de caractere și un caracter c. Determinați de câte ori apare caracterul c în șir.
Exemplu:
Exemplu 1: Intrare: s = "programare", c = 'r' Ieșire: 2 Exemplu 2: Intrare: s = "informatica", c = 'z' Ieșire: 0
Rezolvare C++:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[255];
char c;
cin.getline(s, 255);
cin >> c;
int count = 0;
for(int i = 0; i < strlen(s); i++)
if(s[i] == c) count++;
cout << count;
return 0;
}
Problema 53
Se citește un șir de caractere. Determinați prima apariție a cuvântului de lungime maximă și afișați-l.
Exemplu:
Exemplu 1: Intrare: "eu am gandit corect" Ieșire: "gandit" Exemplu 2: Intrare: "ana are mere" Ieșire: "ana"
Rezolvare C++:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[255];
cin.getline(s, 255);
char copie[255];
strcpy(copie, s);
char *p = strtok(copie, " ");
char cuvant_max[255];
strcpy(cuvant_max, p);
while(p != NULL) {
if(strlen(p) > strlen(cuvant_max))
strcpy(cuvant_max, p);
p = strtok(NULL, " ");
}
cout << cuvant_max;
return 0;
}
Problema 54
Se citește un șir de caractere. Determinați câte cuvinte distincte există în șir.
Exemplu:
Exemplu 1: Intrare: "ana are mere ana" Ieșire: 3 Exemplu 2: Intrare: "eu am am eu" Ieșire: 2
Rezolvare C++:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[255];
cin.getline(s, 255);
char copie[255];
strcpy(copie, s);
char *p = strtok(copie, " ");
char cuvinte[50][50];
int n = 0;
while(p != NULL) {
int gasit = 0;
for(int i = 0; i < n; i++)
if(strcmp(cuvinte[i], p) == 0) gasit = 1;
if(!gasit) {
strcpy(cuvinte[n], p);
n++;
}
p = strtok(NULL, " ");
}
cout << n;
return 0;
}
Problema 55
Se citește un șir de caractere și un caracter c. Înlocuiți toate aparițiile caracterului c cu '*' și afișați șirul rezultat.
Exemplu:
Exemplu 1: Intrare: s = "programare", c = 'r' Ieșire: "p*og*ama*e" Exemplu 2: Intrare: s = "informatica", c = 'z' Ieșire: "informatica"
Rezolvare C++:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[255];
char c;
cin.getline(s, 255);
cin >> c;
for(int i = 0; i < strlen(s); i++)
if(s[i] == c)
s[i] = '*';
cout << s;
return 0;
}
Problema 56
Se citește un șir de caractere. Se construiește un nou șir care conține caracterele șirului inițial în ordine inversă și se afișează.
Exemplu:
Exemplu 1: Intrare: alina Ieșire: anila Exemplu 2: Intrare: informatica Ieșire: acitamrofni
Rezolvare C++:
char s[256], invers[256];
cin.getline(s, 256);
int n = strlen(s);
for(int i = 0; i < n; i++){
invers[i] = s[n-1-i];
}
invers[n] = '\0'; // terminator NULL
cout << invers << endl;
Problema 57
Se citește un șir de caractere și un caracter c. Se numără câte cuvinte din șir încep cu caracterul c. Separatorii sunt spațiile.
Exemplu:
Exemplu 1: Intrare: "ana are mere", c = a Ieșire: 2 Exemplu 2: Intrare: "curs de informatica", c = i Ieșire: 1
Rezolvare C++:
char s[256], p[256], c;
cin.getline(s, 256);
cin >> c;
int count = 0;
strcpy(p, s);
char* tok = strtok(p, " ");
while(tok != NULL){
if(tok[0] == c) count++;
tok = strtok(NULL, " ");
}
cout << count << endl;
Problema 58
Se citește un șir de caractere și un caracter c. Se elimină toate aparițiile caracterului c din șir și se afișează rezultatul.
Exemplu:
Exemplu 1: Intrare: "abracadabra", c = a Ieșire: brcdbr Exemplu 2: Intrare: "informatica", c = i Ieșire: nformatca
Rezolvare C++:
char s[256], rez[256], c;
cin.getline(s, 256);
cin >> c;
int j = 0;
for(int i = 0; i < strlen(s); i++){
if(s[i] != c){
rez[j] = s[i];
j++;
}
}
rez[j] = '\0';
cout << rez << endl;
Problema 59
Se citește un șir de caractere și un cuvânt w. Se înlocuiesc toate aparițiile lui w în șir cu caractere '*' de aceeași lungime ca w și se afișează rezultatul.
Exemplu:
Exemplu 1: Intrare: "Din departare se vede tare", w = "tare" Ieșire: Din departare se vede **** Exemplu 2: Intrare: "ana are mere", w = "are" Ieșire: ana *** mere
Rezolvare C++:
char s[256], w[21], rez[256];
cin.getline(s, 256);
cin.getline(w, 21);
strcpy(rez, s);
int lenw = strlen(w);
char* pos = strstr(rez, w);
while(pos != NULL){
for(int i = 0; i < lenw; i++) pos[i] = '*';
pos = strstr(pos + lenw, w);
}
cout << rez << endl;
Problema 60
Se citește un șir de litere mici. Se transformă toate literele mici în litere mari (conversie ASCII) și se afișează rezultatul.
Exemplu:
Exemplu 1: Intrare: "informatică" Ieșire: INFORMATICĂ Exemplu 2: Intrare: "ana are mere" Ieșire: ANA ARE MERE
Rezolvare C++:
char s[256];
cin.getline(s, 256);
for(int i = 0; i < strlen(s); i++){
if(s[i] >= 'a' && s[i] <= 'z'){
s[i] = s[i] - 32; // conversie la majuscule
}
}
cout << s << endl;