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

[C++] Wyświetla tylko znak @ wykorzystując cctype w pętli if else.

Object Storage Arubacloud
+1 głos
534 wizyt
pytanie zadane 21 listopada 2016 w C i C++ przez niezalogowany

Nie wiem dlaczego mi pokazuje tylko znak @. Małe litery mają być zamienione na wielkie i odwrotnie, a cyfry ma nie wyświetlać. próbowałem w różnej kolejności ustawiać isalpha i pozostałe. nawet wyciąłem isalpha, ale to nie pomaga. Gdzie zrobiłem błąd? Niestety nigdzie go nie mogę znaleźć.

#include <iostream>

int main()
{
    std::cout << "Podaj tekst do analizy, @ kończy: ";
    char ch;
    int letter;
    int small;
    int big;
    int digit;
    std::cin.get(ch);
    while (ch != '@')
    {
         if (!(isdigit(ch)) and !(isxdigit(ch)))
            digit++;
        else if (tolower(ch))
            small++;
        else if (toupper(ch))
            big++;
        else if (isalpha(ch))
            letter++;
        std::cin.get(ch);
    }
    std::cout << ch
              << std::endl;
    return 0;
}

 

komentarz 21 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
Co dokładnie chcesz zrobić ? Jak jest treść zadania ?
komentarz 21 listopada 2016 przez niezalogowany
Zauważyłem, że nie dodałem #include <cctype>. Dodałem i to samo.

Treść zadania:

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 (bardzo przydatna będzie tu biblioteka cctype).
komentarz 21 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
No to rozumiem, że skoro wczytujesz znak po znaku to w każdym przebiegu pętli będzie wyświetlana ta litera ? Skoro tych liter nie składujesz w tablicy :)
komentarz 21 listopada 2016 przez niezalogowany
W książce nie napisał, że potrzebna jest w tym przypadku tablica. Tylko zrobił przykład z zliczania ile spacji, liter, cyfr itp jest w tekście. Pokazał jakie są funkcje w cctype i dodał, że nie wszystkie muszą być  w niektórych systemach i że mogą być jakieś dodatkowe.

Czyli do char ch mam dodać []? To wystarczy?
komentarz 21 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
Nie, tablica byłaby Ci potrzebna w momencie gdy byś chciał wypisać całość wyniku.

Widzę, że nie rozumiesz pętli więc proponuję cofnąć się do rozdziału o pętlach.

pzdr
komentarz 21 listopada 2016 przez niezalogowany
Myślałem, że o to tobie chodzi. Tak napisałeś, tak zrozumiałem.

2 odpowiedzi

0 głosów
odpowiedź 21 listopada 2016 przez fenq80 Bywalec (2,940 p.)

Pokazuje ci tylko znak @ ponieważ tylko  go wyświetlacz używając cout.  Wiec cou<< char ; powinno być w pętli po wszystkich insttukcjach if else. 

komentarz 21 listopada 2016 przez niezalogowany
Jak dałem tam gdzie piszesz to dało mi taki błąd: Expected '(' for function-style cast or type construction a jak mam ch to nie ma tego błędu. Nawet nawiasy dałem i też nie pomogło. Połączyłem też tolower i toupper w jednym if i nie pomogło.
komentarz 21 listopada 2016 przez niezalogowany
jak mam ch zamiast char to mi pionowo pokazuje literkę bez żadnej zmiany z cyframi i oprócz 1, wpisanej litery.
komentarz 21 listopada 2016 przez fenq80 Bywalec (2,940 p.)
#include <iostream>
#include <cctype>

int main()
{
   std::cout<<"podaj teks"<<std::endl;
   char ch;
   int letter(0);
   int small(0);
   int big(0);
   int digit(0);
   std::cin.get(ch);
   while(ch != '@')
   {

       if(isdigit(ch))
        digit++;
       else if(islower(ch))
       {
        small++;
        ch = toupper(ch);
       }
       else if(isupper(ch))
       {
        big++;
        ch = tolower(ch);
       }
       else if (isalpha(ch))
        letter++;

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

}

Proszę bardzo u mnie dziala

0 głosów
odpowiedź 21 listopada 2016 przez mrcnsct Nałogowiec (36,390 p.)
Treść zadania (z Twojego komentarza): "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 (bardzo przydatna będzie tu biblioteka cctype)."

Wczytujesz znak. Jeśli znak jest @ to kończysz program. Jeśli nie to:

1) sprawdzasz czy jest cyfrą, jeśli tak to nic nie robisz, jeśli nie to:

2) sprawdzasz czy jest małą literą, jeśli tak to wypisujesz wielką literę, jeśli nie to:

3) sprawdzasz czy jest wielką literą, jeśli tak to wypisujesz małą literę, jeśli nie to:

4) wypisujesz znak niezmieniony.

To wyżej w pętli.

Sprawdzanie czy jest cyfrą: isdigit(ch), myślę, że nie powinieneś używać isxdigit(ch), ponieważ w poleceniu nie ma nic o szesnastkowych cyfrach, a isxdigit(ch) potraktuje litery a-f i A-F jako cyfry szesnastkowe.

Czy jest małą literą: islower(ch).

Czy jest wielką literą: isupper(ch).

Na wielką literę: toupper(ch).

Na małą: tolower(ch).

Zauważ, że tolower i toupper zwrócą Ci int (kod znaku ASCII), więc przy wypisywaniu zrzutuj to na char.
komentarz 21 listopada 2016 przez fenq80 Bywalec (2,940 p.)
Nie trzeba rzutowac
komentarz 21 listopada 2016 przez mrcnsct Nałogowiec (36,390 p.)
std::cout<< tolower('A');

To wypisuje 97 zamiast a.

komentarz 21 listopada 2016 przez fenq80 Bywalec (2,940 p.)

no tak wtedy trzeba. Ale mi chodzilo ze można tez napisac tak

ch = tolower('A');

Ale masz racje :) bo tu tez rzutuje .

 

Podobne pytania

0 głosów
1 odpowiedź 999 wizyt
pytanie zadane 4 marca 2018 w C i C++ przez urbix01 Gaduła (3,290 p.)
0 głosów
2 odpowiedzi 325 wizyt
pytanie zadane 31 lipca 2017 w C i C++ przez advertajment Nowicjusz (160 p.)

92,536 zapytań

141,377 odpowiedzi

319,454 komentarzy

61,922 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...