[C++]Kontenery

Gekowski
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 24 sty 2017, o 23:49
Płeć: Mężczyzna
Lokalizacja: Włocławek

[C++]Kontenery

Post autor: Gekowski »

Chciałbym wysortować i znaleźć najkrótszy wiersz z wczytanego pliku i zupełnie nie wiem jak się do tego zabrać. Do tego zadania muszę użyć kontenerów. Póki co, mam tyle i dalej nie wiem co zrobić. Pomoże ktoś?

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

class DANE
{
private:
    string wiersz1, wiersz2, wiersz3, wiersz4;

public:
    DANE( string new_wiersz1, string new_wiersz2, string new_wiersz3, string new_wiersz4 )
    {
        wiersz1 = new_wiersz1;
        wiersz2 = new_wiersz2;
        wiersz3 = new_wiersz3;
        wiersz4 = new_wiersz4;
    }
   };
vector < DANE > DANA;




int main()
{
    vector < DANE > DANA;
    ifstream plik;
    string dana1, dana2, dana3, dana4;
    plik.open( "tekst.txt", ios::in);
    int i=1;
    
    
    if( !plik.good() )
    {
        cout << "Brak dostepu do pliku";
        cin.sync();
        cin.get();
        return 0;
    }
    else
    while( !plik.eof() )
    {

        plik >> dana1;
        plik >> dana2;
        plik >> dana3;
        plik >> dana4;
        DANA.push_back( DANE( dana1, dana2, dana3, dana4 ) );
    }
    plik.close();
    plik.clear();
    cin.sync();
    cin.get();
}
qwertghjio
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 5 paź 2016, o 14:54
Płeć: Mężczyzna
Lokalizacja: pzn
Podziękował: 3 razy

[C++]Kontenery

Post autor: qwertghjio »

Czy dobrze rozumiem: Masz za zadanie w pliku tekstowym znaleźć wiersz w którym jest najmniej znaków. Tak?
Tak wygląda wówczas algorytm:
Pobierasz pierwszy wiersz z pliku i wpisujesz go do jakiejś zmiennej pomocniczej, następnie sprawdzasz długość tej zmiennej. Ten wynik zapisujesz sobie do vectora. Powtarzasz tą operację, aż odczytasz wszystkie wiersze z pliku. Jak już to zrobisz to sortujesz jakąś dowolną metodą ten vector i tyle.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++]Kontenery

Post autor: kalwi »

Ten kod co masz obecnie nie ma za wiele sensu. Może się przydać funkcja getline tutaj
Gekowski
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 24 sty 2017, o 23:49
Płeć: Mężczyzna
Lokalizacja: Włocławek

[C++]Kontenery

Post autor: Gekowski »

qwertghjio pisze:Czy dobrze rozumiem: Masz za zadanie w pliku tekstowym znaleźć wiersz w którym jest najmniej znaków. Tak?
Tak wygląda wówczas algorytm:
Pobierasz pierwszy wiersz z pliku i wpisujesz go do jakiejś zmiennej pomocniczej, następnie sprawdzasz długość tej zmiennej. Ten wynik zapisujesz sobie do vectora. Powtarzasz tą operację, aż odczytasz wszystkie wiersze z pliku. Jak już to zrobisz to sortujesz jakąś dowolną metodą ten vector i tyle.
Tak, ma też wypisać elementy z tego pliku.
Poprawiłem tak, ale dalej nie wiem czy dobrze zrozumiałem co dokładnie mam zrobić, żeby kod działał. Nie ukrywam, że te kontenery trochę mnie przerażają:

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

class DANE
{
private:
    string wiersz1, wiersz2, wiersz3, wiersz4;

public:
    DANE( string new_wiersz1, string new_wiersz2, string new_wiersz3, string new_wiersz4 )
    {
        wiersz1 = new_wiersz1;
        wiersz2 = new_wiersz2;
        wiersz3 = new_wiersz3;
        wiersz4 = new_wiersz4;
    }
   };


int main()
{
    std::vector < DANE > tab;
    string wiersz;
    ifstream plik;
    plik.open( "tekst.txt", ios::in);
    while( !plik.eof() )
{
    std::getline( std::cin, wiersz );
    sort( tab.begin(), tab.end() );
     cout<<tab.size()<<endl;
}
    plik.close();
    plik.clear();
    cin.sync();
    cin.get();
}
ODPOWIEDZ