Clasa a X-a · Șiruri de caractereRead in English
Transformarea în majuscule și minuscule în C++
În engleză: Converting to uppercase and lowercase
Ideea
În tabelul ASCII literele mari 'A'..'Z' și cele mici 'a'..'z' sunt la distanță constantă: 'a' - 'A' = 32. O literă mică devine mare scăzând 32 (s[i] = s[i] - 'a' + 'A'), iar invers adunând. Funcțiile toupper și tolower din <cctype> fac același lucru și lasă neschimbate celelalte caractere. Afișăm șirul cu majuscule, cu minuscule și apoi cu prima literă a fiecărui cuvânt mare, restul mici.
Descrierea în engleză
In the ASCII table the uppercase letters 'A'..'Z' and the lowercase 'a'..'z' are a constant distance apart: 'a' - 'A' = 32. A lowercase letter becomes uppercase by subtracting 32 (s[i] = s[i] - 'a' + 'A'), and the other way round by adding. The functions toupper and tolower from <cctype> do the same and leave other characters unchanged. The string is printed in uppercase, in lowercase, and then with the first letter of every word capitalized and the rest lowercase.
- Complexitate
- O(L)
- Clasa
- Clasa a X-a (Grade 10)
- Capitol
- Șiruri de caractere
Exemple
Intrare
ana ARE mERe
Ieșire așteptată
ANA ARE MERE ana are mere Ana Are Mere
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Transformarea în majuscule și minuscule
* Clasa: 10
* Capitol: Șiruri de caractere
* Descriere: În tabelul ASCII literele mari 'A'..'Z' și cele mici 'a'..'z' sunt la
* distanță constantă: 'a' - 'A' = 32. O literă mică devine mare scăzând
* 32 (s[i] = s[i] - 'a' + 'A'), iar invers adunând. Funcțiile toupper și
* tolower din <cctype> fac același lucru și lasă neschimbate celelalte
* caractere. Afișăm șirul cu majuscule, cu minuscule și apoi cu prima
* literă a fiecărui cuvânt mare, restul mici.
* Complexitate: O(L)
*
* Exemplu
* Intrare: ana ARE mERe
* Ieșire:
* ANA ARE MERE
* ana are mere
* Ana Are Mere
*/
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main()
{
char s[256], t[256];
cin.getline(s, 256);
int n = strlen(s);
// majuscule, „de mână”
strcpy(t, s);
for (int i = 0; i < n; i++)
if (t[i] >= 'a' && t[i] <= 'z')
t[i] = t[i] - 'a' + 'A';
cout << t << '\n';
// minuscule, cu tolower
strcpy(t, s);
for (int i = 0; i < n; i++)
t[i] = tolower(t[i]);
cout << t << '\n';
// prima literă a fiecărui cuvânt mare
for (int i = 0; i < n; i++)
{
if (i == 0 || t[i - 1] == ' ')
t[i] = toupper(t[i]);
}
cout << t << '\n';
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.