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

Se dă un șir de caractere. Să se transforme toate literele mici în litere mari și invers.

Date de intrare
De pe prima linie se va citi șirul de caractere.

Date de ieșire
Pe ecran se va afișa șirul cu literele transformate.

Restricții și precizări
Lungimea șirului va fi mai mică sau egală cu 1 000.

Exemplu
Date de intrare Date de ieșire
Acesta EsTe un SIR aCESTA eStE UN sir

Acesta este codul :

#include
#include
using namespace std;

const int MAX_LENGHT = 1000;

int main() {
char s[MAX_LENGHT];
cin.getline(s, MAX_LENGHT);
int n = strlen(s);
for (int i = 0; i < n; i++) {
if ('a' <= s[i] && s[i] <= 'z') {
s[i] -= 32;
}
else if ('A' <= s[i] && s[i] <= 'Z') {
s[i] += 32;
} else {
s[i] = ' ';
}
}
cout << s;
return 0;
}

Se pare ca iau 0 puncte .
Se mai poate face si altfel ?
Ma puteti ajuta cu o alta varianta ?
Multumesc!


VxF: De ce ai pus else? Dacă sunt semne de punctuaţie, ăla le va înlocui cu spaţii. Din enunţ nu mi s-a părut că e nevoie de asta.
VxF: Ai încercat să pui și un endl la sfârșit? Unele sisteme de evaluare vor ca toate rândurile să fie terminate cu caracter rând nou.
oanaroxana3: Am descoperti greseala, trebuia asa s[i] = 'A' -'a'

Răspunsuri la întrebare

Răspuns de VxF
1

Răspuns:

#include <iostream>

#include <cstring>

#include <cctype>

using namespace std;

const int MAX_LENGHT = 1000;

int main() {

   char s[MAX_LENGHT];

   cin.getline(s, MAX_LENGHT);

   int n = strlen(s);

   for (int i = 0; i < n; i++) {

       if (islower(s[i])) {

           s[i] = toupper(s[i]);

       } else if (isupper(s[i])) {

           s[i] = tolower(s[i]);

       }

   }

   cout << s << endl;

   return 0;

}

Explicație:

Ai întrebat dacă se poate face altfel. Da, folosind biblioteca de rutine cctype. Dar nu m-aș așteptă la vreo diferență de la asta. Problema trebuie să fie altundeva.


oanaroxana3: Multumesc!
Alte întrebări interesante