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

Odwrocenie danych wejsciowych po spacji

Object Storage Arubacloud
0 głosów
404 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez czujek22 Dyskutant (7,670 p.)

Witam. Zadanko ze SPOJA gdzie wprowadza się kilka liczb po spacji, a program ma wypisać je od tyłu. Nie przerabiałem jeszcze dogłębnie vectora więc prosze o naprowadzenie na błąd. Program działa, jednak podczas wyswietlania odwróconych liczb, pierwsza jest jakimś smieciem z pamięci.

 

#include <iostream>
#include <vector>
#include <cstdio>
#include <conio.h>

using namespace std;


int main()
{
    vector<int> vec;
    int x;


    while ((cin >> x) &&(getchar()!='\n'))
    {
        vec.push_back(x);
    }
    for(int i = vec.size(); i >=0; i--)
    {
        cout << vec[i]<< " ";
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 29 grudnia 2016 przez criss Mędrzec (172,590 p.)

Nic dziwnego, bo vec[vec.size()] to element za ostatnim elementem. Po prostu zmniejsz początkową wartość i o 1.

komentarz 29 grudnia 2016 przez czujek22 Dyskutant (7,670 p.)
 for(int i = vec.size()-1; i >=0; i--)

Nie wiem czy w ten sposób

Wtedy tego pierwszego wyrazu wgl nie wyswietla

komentarz 29 grudnia 2016 przez criss Mędrzec (172,590 p.)
No to chyba o to chodziło? XD Pierwszy wyświetlony wyraz jak sam zauważyłeś był śmieciami z pamięci.
komentarz 29 grudnia 2016 przez czujek22 Dyskutant (7,670 p.)
Tylko, że ja chcę aby wyświetlało wpisane liczby od tyłu;

wejscie: 1 2 3 4 5

wyjscie: 5 4 3 2 1

A wyswietla: 4 3 2 1
komentarz 29 grudnia 2016 przez criss Mędrzec (172,590 p.)

Tzn., że ostatniej liczby (5) w ogóle nie ma w vectorze.

Spróbuj tak:

    while (1)
    {
        cin >> x;
        if(x == '\n')
           break;
        vec.push_back(x);
    }

Nie najpiękniejszy kod, ale to w celu upewnienia się, że jest tak jak myśle.

komentarz 29 grudnia 2016 przez czujek22 Dyskutant (7,670 p.)

Wciąż powoduje to błąd, nie wyświetlając ostatniej wprowadzonej liczby. Co ciekawe zrobiłem to poprzez liste:

#include <iostream>
#include <list>
#include <cstdio>

using namespace std;

list <int> lista;

int main()
{
    int liczba;

    while ((cin >> liczba) &&(getchar()!='\n'))
        {
            lista.push_front(liczba);
        }

    for(list<int>::iterator i=lista.begin();i != lista.end(); ++i)
            cout<<*i<<" ";

    return 0;
}

I jest to samo. Błąd pewnie leży w pętli, jednak nie mogę wpaść na czym polega. Bo chyba nie wina środowiska ?

komentarz 29 grudnia 2016 przez czujek22 Dyskutant (7,670 p.)

Ok zrobione. Problem leżał w buforze cina :)

Poprawione z pętlą do while:

#include <iostream>
#include <list>
#include <cstdio>
using namespace std;

list <int> lista;

int main()
{
    int liczba;

    do
    {
        cin >> liczba;
        lista.push_front(liczba);
    }
    while(cin && getchar()!='\n');


    for(list<int>::iterator i=lista.begin(); i != lista.end(); ++i)
        cout<<*i<<" ";

    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,590 wizyt
pytanie zadane 13 listopada 2016 w C# przez Barus Stary wyjadacz (14,120 p.)
0 głosów
2 odpowiedzi 354 wizyt
pytanie zadane 14 grudnia 2015 w C i C++ przez dichloroetylobenzen Użytkownik (850 p.)
0 głosów
1 odpowiedź 1,940 wizyt
pytanie zadane 3 grudnia 2015 w C i C++ przez Kaydan Początkujący (260 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...