Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Sortowanie alfabetyczne wierszy w pliku.

Ostatnio zmodyfikowano 2015-01-12 10:41
Autor Wiadomość
Myraa
Temat założony przez niniejszego użytkownika
[C++] Sortowanie alfabetyczne wierszy w pliku.
» 2015-01-07 21:13:34
Witam!
Próbuję napisać program, który posortuje mi alfabetycznie wiersze w pliku bez wczytywania całej zawartości. Niestety nie mam za bardzo pomysłu co zrobić. Póki co wpadłem na tyle, ale niestety nawet to nie działa poprawnie. Z góry dziękuję za pomoc.
C/C++
while( !plik.eof() )
{
    getline( plik, linia1 );
    getline( plik, linia2 );
    if( linia1 > linia2 )
    {
        linia2.swap( linia1 );
        plik << linia1 << endl;
        plik << linia2 << endl;
    }
}
P-124414
NopeDotAvi
» 2015-01-07 21:30:20
wczytaj do jakiegoś vectora i potem użyj std::sort

przeanalizuj ten przykład: (c++11)
C/C++
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
    std::vector < std::string > v;
    v.push_back( "Foo" );
    v.push_back( "Boo" );
    v.push_back( "Test" );
    for( const auto & it: v ) //przed posortowaniem
         std::cout << it << std::endl;
   
    std::sort( v.begin(), v.end() ); //sortowanie
   
    for( const auto & it: v ) // po posortowaniu
         std::cout << it << std::endl;
   
    return 0;
}
P-124417
Myraa
Temat założony przez niniejszego użytkownika
» 2015-01-07 21:35:11
Wolałbym to zrobić bez wykorzystania vectorów. Mógłby ktoś podesłać jakieś materiały, albo wytłumaczyć jak to zrobić inaczej?
P-124419
darko202
» 2015-01-07 22:42:11
P-124426
Myraa
Temat założony przez niniejszego użytkownika
» 2015-01-08 14:54:53
Miałby ktoś jeszcze jakiś pomysł? Chciałem to zrobić na zasadzie sortowania bąbelkowego. Mam coś takiego, ale wcale nie działa lepiej.
C/C++
while( posortowano == false )
{
    posortowano = true;
    for( int i = 0; i <= licz; i++ )
         getline( plik, linia1 );
   
    while( !plik.eof() )
    {
        getline( plik, linia2 );
        if( linia1 > linia2 )
        {
            posortowano = false;
            linia2.swap( linia1 );
        }
        plik2 << linia1 << endl;
        cout << linia1 << endl;
    }
    licz++;
}


Pomoże ktoś?
Nikt? :(
P-124444
michal11
» 2015-01-09 14:36:39
Po 1. nie minęły jeszcze nawet 24h
Po 2. jeżeli ktoś umiałby ci pomóc to pewnie już by to zrobił
Po 3. myślisz, że takie regularne podbijanie tematu coś pomoże ?
P-124488
Piastlis
» 2015-01-09 22:53:09
Jeżeli chcesz posortować plik to istnieją dwa warianty.
Pierwszy jest taki że plik jest mały i można go zgrać do tablicy .Wtedy możesz operować indeksami i sortowanie bąbelkowe jest jak najbardziej na miejscu.
 Jeżeli plik jest ogromny i nie mieści się do pamięci kompa to sortowanie bąbelkowe się nie sprawdza.Po prostu trzeba stworzyć tyle plików tymczasowych ile jest elementów do posortowania a że jest ich bardzo dużo czas posortowania byłby niewyobrażalnie długi.
 Moja rada : najpierw posortuj bąbelkowo tablicę wierszy a potem poczytaj o algorytmach sortowania plików. Podręcznik nazywa się Pascal a autor to Niklaus Wirth.
Nie jest to kurs tylko podręcznik akademicki ale są pokazane elementarne algorytmy wykorzystania struktur danych.Jak wskazuje nazwa i nazwisko autora wszystkie przykłady są w pascalu:)
 
P-124538
1aam2am1
» 2015-01-10 11:13:33
Nie lepiej zastosować quick sort
P-124551
« 1 » 2
  Strona 1 z 2 Następna strona