• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana małej litery na wielką i na odwrót

0 głosów
353 wizyt
pytanie zadane 30 grudnia 2015 w C i C++ przez sympi Nowicjusz (240 p.)

Witam, próbuje rozgryźć takie zadanie:

Napisz program wczytujący dane z klawiatury aż do znaku @, a następnie pokazujący wczytane dane poza cyframi; każda wielka litera ma być zamieniona na małą i odwrotnie.

Nie wiem dlaczego w moim programie następuje tylko zamiana z wielkiej litery na małą, a odwrotnie nie działa, mimo że jest zrobione analogicznie. Nie rozumiem :/

 

Oto mój kod:

#include <iostream>
#include <cctype>

using namespace std;

int main()
{
    char ch;
    cout << "Wprowadz zdanie, @ konczy program." << endl;
    cin.get(ch);

    while (ch!='@')
    {
    if (isdigit(ch))
      ch = NULL;
    if (isupper(ch)==true)
      ch=tolower(ch);
    if (islower(ch)==true)
      ch=toupper(ch);
      
       cout << ch;
       cin.get(ch);
    }

    return 0;
}

Ma ktoś jakiś pomysł?

3 odpowiedzi

+1 głos
odpowiedź 30 grudnia 2015 przez makoso Mądrala (7,380 p.)

nie znam się na C++ ale łatwo zauważyć że najpierw zmniejszasz te wielkie litery na małe

if (isupper(ch)==true)
      ch=tolower(ch);

następnie wszystkie zwiększasz (te które były małe i te które stały się małe

if (islower(ch)==true)
      ch=toupper(ch);
       
       cout << ch;
       cin.get(ch);
    }

rozwiązanie mbędzie zastosowanie tutaj elseif jeżeli istnieje w C++ a ja nie mam zielonego pojęcia dla mnie wyglądałoby to podobnie do:

#include <iostream>
#include <cctype>
 
using namespace std;
 
int main()
{
    char ch;
    cout << "Wprowadz zdanie, @ konczy program." << endl;
    cin.get(ch);
 
    while (ch!='@')
    {
    if (isdigit(ch))
      ch = NULL;
    if (isupper(ch)==true){
      ch=tolower(ch);
    }
    else if (islower(ch)==true){
      ch=toupper(ch);
       }
       cout << ch;
       cin.get(ch);
    }
 
    return 0;
}

 

+1 głos
odpowiedź 30 grudnia 2015 przez Colossus Mądrala (6,850 p.)
   
Spróbuj czy takie coś zadziała:
 if (isupper(ch)==true)
      ch=tolower(ch);
    else if (islower(ch)==true)
      ch=toupper(ch);

 

0 głosów
odpowiedź 30 grudnia 2015 przez sympi Nowicjusz (240 p.)

Macie racje! Brakowało else po warunku... ale ja ślepy. Chociaż po dodaniu else program nadal nie działał tak jak powinien, musiałem zamienić == true, na != false... Teraz rozkminiam dlaczego... indecisionlaugh

Tak wygląda teraz kod w pętli:

while (ch!='@')
    {
    if (isdigit(ch) == true)
      ch = NULL;
    if (isupper(ch) == true)
      ch = tolower(ch);
    else if (islower(ch) != false)
      ch = toupper(ch);

       cout << ch;
       cin.get(ch);
    }

Wszystko działa super. Dzięki wielkie za pomoc :)

Podobne pytania

0 głosów
2 odpowiedzi 1,477 wizyt
pytanie zadane 10 czerwca 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
3 odpowiedzi 582 wizyt
pytanie zadane 25 lutego 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
0 głosów
1 odpowiedź 630 wizyt
pytanie zadane 22 grudnia 2015 w C i C++ przez Zangariev Początkujący (290 p.)

93,632 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...