Błędne wczytywanie ilości znaków
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Błędne wczytywanie ilości znaków

AutorWiadomość
Temat założony przez niniejszego użytkownika
Błędne wczytywanie ilości znaków
» 2017-01-19 20:43:52
Witajcie mam takie zadanie:
Zadanie 2
Napisać program działający na ciągu znaków, który:
1. wczytuje znak będący symbolem końca ciągu, wymuszając, by był on cyfrą;
2. wczytuje ciąg znaków pojedynczo (znak po znaku) aż do napotkania tego końca ciągu
3. drukuje informację:
a) których znaków wczytano więcej: małych liter czy dużych liter (lub informację,
że było ich tyle samo)
b) ile razy dwa znaki & stały obok siebie (tzn. wczytano kolejno po sobie dwa takie
znaki).
Wskazówka do 1 i 3a: Małe litery to znaki zawarte między ‘a‘ i ‘z’ , cyfry to znaki zawarte
między ‘0’ i ‘9’. Znaki należy wczytywać instrukcją cin (będą się wczytywały tylko znaki
widoczne).
Wskazówka do 3b: przed wczytaniem nowego znaku należy zapamiętać poprzednio wczytany
znak.
 

Problem mam taki że źle mi zlicza litery duże i małe, drugi problem to taki że gdy cyfrą kończącą jest '0' i użytkownik poda ciąg &&0 to program wyświetla że znaki '&' wystąpiły po sobie 2 razy a to nie prawda bo nastąpiło to tylko raz.

Może mi ktoś powiedzieć gdzie robię błąd??


#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
    char koniec_c, aktualny, wczytany;
    int l_m, l_d, i_z;
    l_m = 0;
    l_d = 0;
    i_z = 0;

    while (koniec_c<'0' || koniec_c >'9')
    {

        cout << " podaj koniec ciagu : ";
        cin >> koniec_c;

        if (koniec_c>='0' && koniec_c <='9')
        {
            cout << " koniec ciagu to : " << koniec_c << endl;
        }
        else
            cout << " Wprowadzony znak nie jest cyfra. \n" << endl;
    }
    do
    {



        if (aktualny >='a' && aktualny <='z')
            l_m++;
        if (aktualny >='A' && aktualny <='Z')
            l_d++;
        if (aktualny=='&' || wczytany=='&')
            i_z ++;

        cin >> aktualny;

    }while (aktualny != koniec_c);


    if (l_m > l_d)
        cout << " wiecej jest liter malych " << endl;
    else if (l_m < l_d)
        cout << " wiecej jest liter duzych " << endl;
    else
        cout << " Wprowadzono tyle samo malych i duzych liter " << endl;

    cout << " Znak '&' wystapil bezposrednio po sobie:  " << i_z;




    return 0;
}


P-156682
» 2017-01-20 10:54:42
C/C++
char koniec_c, aktualny, wczytany;
...

while( koniec_c < '0' || koniec_c > '9' ) {...}
Jaką ma wartość koniec_c przy wejściu w pętle?


C/C++
do
{
   
    if( aktualny >= 'a' && aktualny <= 'z' )
         l_m++;
   
    if( aktualny >= 'A' && aktualny <= 'Z' )
         l_d++;
   
    if( aktualny == '&' || wczytany == '&' )
         i_z++;
   
    cin >> aktualny;
   
}
while( aktualny != koniec_c );
Podobnie jak wyżej: jaką wartość ma aktualny przy pierwszej iteracji? A ten wczytany po co tam jest? Jaką ma wartość?

Takie uwagi na początek.

p.s. kod wstawiaj w znacznik
[cpp] kod [/cpp]
.
P-156701
Temat założony przez niniejszego użytkownika
» 2017-01-20 17:10:02
I aktualny i koniec_c powinny mieć wartość 0. Zmienną wczytany dodałem żeby móc wykonać polecenie zliczania dwóch znaków "&&" po sobie chodź jak się teraz temu przyglądam to nie za bardzo bedzie to działać. Wiesz może co powinienem zrobić żeby mi pokazywalo ile razy te znaki wystąpiły po sobie??
P-156709
» 2017-01-20 18:46:08
C/C++
...

char poprzedni = 0;

while( cin >> aktualny && aktualny != koniec_c )
{
   
    if( aktualny >= 'a' && aktualny <= 'z' ) ++l_m;
    else if( aktualny >= 'A' && aktualny <= 'Z' ) ++l_d;
    else if( aktualny == '&' && poprzedni == '&' ) { ++i_z; aktualny = 0; }
   
    poprzedni = aktualny;
}
P-156711
Temat założony przez niniejszego użytkownika
» 2017-01-20 20:52:19
Dzięki za pomoc teraz już wszystko działa i  wiele mi się wyjaśniło.:)
P-156713
« 1 »
 Strona 1 z 1