Clasa a X-a · Șiruri de caractereRead in English

Transformarea în majuscule și minuscule în C++

În engleză: Converting to uppercase and lowercase

O(n)C++1753 de linii1 exemplu

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)

Exemple

Exemplul 1

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.

majuscule-si-minuscule.cpp
/*
 * 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.