Șiruri de caractere în C++

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ția strcmp.
#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;

Reclame Google AdSense

Flux de știri