std::toupper în C++

Transformă o literă în majusculă (toupper) sau minusculă (tolower); restul rămân neschimbate.

Sintaxă
#include <cctype>
int toupper(int c);
int tolower(int c);

Ce face std::toupper

std::toupper('a') returnează 'A', iar std::tolower('A') returnează 'a'. Caracterele care nu sunt litere (cifre, spații, semne) sunt returnate neschimbate.

Rezultatul este int, așa că îl convertești înapoi la char. Pentru un șir întreg, aplici funcția pe fiecare caracter, de obicei cu o buclă sau cu std::transform.

Ca toate funcțiile din <cctype>, lucrează pe un octet: „ă” nu devine „Ă”, iar textul rămâne neschimbat la diacritice.

Parametri

Parametru Descriere
c Caracterul, convertit la unsigned char.

Ce returnează

Caracterul transformat, ca int.

Exemple

Exemplul 1: Un șir în majuscule și în minuscule

#include <cctype>
#include <iostream>
#include <string>

std::string majuscule(std::string s) {
    for (char& c : s) {
        c = static_cast<char>(std::toupper(static_cast<unsigned char>(c)));
    }
    return s;
}

std::string minuscule(std::string s) {
    for (char& c : s) {
        c = static_cast<char>(std::tolower(static_cast<unsigned char>(c)));
    }
    return s;
}

int main() {
    std::cout << majuscule("Cluj-Napoca 2026") << '\n';
    std::cout << minuscule("FACTURA.PDF") << '\n';
    std::cout << majuscule("Brașov") << " (ș rămâne mic)\n";
}

Rezultat

CLUJ-NAPOCA 2026
factura.pdf
BRAșOV (ș rămâne mic)

Exemplul 2: Comparare fără să conteze literele mari

#include <cctype>
#include <iostream>
#include <string>

bool egale_ignora_mari(const std::string& a, const std::string& b) {
    if (a.size() != b.size()) return false;
    for (std::size_t i = 0; i < a.size(); ++i) {
        if (std::tolower(static_cast<unsigned char>(a[i])) != std::tolower(static_cast<unsigned char>(b[i]))) {
            return false;
        }
    }
    return true;
}

int main() {
    std::cout << std::boolalpha << egale_ignora_mari("poza.JPG", "POZA.jpg") << '\n';
    std::cout << egale_ignora_mari("Ana", "Ane") << '\n';
}

Rezultat

true
false

Greșeli frecvente

  • Afișezi direct rezultatul: std::cout << std::toupper('a') scrie 65, pentru că rezultatul este int. Convertește-l la char.
  • Te aștepți ca „ș” să devină „Ș”: funcțiile nu lucrează cu caractere UTF-8 de mai mulți octeți. Pentru text internațional e nevoie de o bibliotecă precum ICU.

Comenzi înrudite

  • std::isalpha: Verifică tipul unui caracter: literă, cifră, spațiu, majusculă, minusculă sau punctuație.
  • std::string: Șir de caractere care își gestionează singur memoria; atenție, lucrează cu octeți, nu cu litere.
  • std::string::compare: Compară două șiruri și returnează un număr negativ, zero sau pozitiv, ca la sortare.