Informatică, întrebare adresată de unknow754, 8 ani în urmă

În C++:
Se dă un caracter să se elaboreze un program în care caracterul mic este transformat în mare, și invers.​


VxF: Un singur caracter? De obicei exerciţiile similare sunt cu toate caracterele unui șir.

Răspunsuri la întrebare

Răspuns de VxF
10

Răspuns:

#include <iostream>

#include <cctype>

int main()

{

   char caracter;

   std::cout << "Caracter: ";

   std::cin >> caracter;

   if (islower(caracter)) {

       caracter = toupper(caracter);

   } else if (isupper(caracter)) {

       caracter = tolower(caracter);

   }

   std::cout << "Transformat: " << caracter << std::endl;

}

Explicație:

Răspuns de andrei750238
14

#include <iostream>

using namespace std;

int main() {

   char x;

   cin >> x;

   if (x >= 'a' && x <= 'z') cout << (char)(x - 'a' + 'A');

   else if (x >= 'A' && x <= 'Z') cout << (char)(x - 'A' + 'a');

   else cout << "Caracterul introdus nu e litera";

}

► Explicatie :

Ne putem folosi de faptul ca in ASCII caracterele sunt in ordine crescatoare, succesiva, asa cum sunt in alfabet. Astfel putem verifica manual  daca un caracter este litera mare (verificand daca valoarea ascii e cuprinsa intre 'a' si 'z'), si il putem transforma in litera mare scazand din x valoarea lui 'a' (asa aflam practic a cata litera din alfabet este x : daca x='a' atunci vom avea 0, daca e 'b' atunci vom avea 1, etc.). Adaugand valoarea obtinuta la 'A' ajungem la caracterul corespunzator literei mari.

Idem pentru a transforma din litera mare in litera mica. Verificam sa fie intre 'A' si 'Z', apoi scadem valoarea lui 'A' si o adunam pe cea a lui 'a'.

a → b → c → ..... → z

A → B → C → .... → Z

.


VxF: Tricky. Dar. 1) „caracterul mic este transformat în mare” — pentru literă mică îmi afișează _codul_ literei mari; 2) „și invers” — litera mare nu transformă de loc.
andrei750238: Se rezolva usor cu un casting. Dar parca inainte mergea si fara.
Acelasi lucru trebuia facut si pentru litera mare
Alte întrebări interesante