while(), fstream i sortowanie bąbelkowe - nie wiem o co chodzi

0

Dobry,
Ja naprawde przepraszam za tytul (i za brak polskich znakow), ale nie mam zielonego pojecia o co moze chodzic... Kod wyglada nastepujaco (nie ma wiekszego sensu tutaj, ale w wiekszym projekcie owszem, wiec prosze, nie pytajcie "dlaczego chcesz zrobic...."):

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

using namespace std;

string sort (string slowo){
string litery = slowo;

for (int i=0; i<litery.length()-1; i++)
    for (int j=0; j<litery.length()-1; j++)
        if (litery[j]>litery[j+1])
(3)             swap(litery[j], litery[j+1]);

return litery;
}

int main()
{

fstream wordlist;
wordlist.open("wordlist_test",ios::in);
vector<string> words;

(4) while (!wordlist.eof()){
    bool ok = true;
    string word;
    getline(wordlist,word);
    string sorted = sort(word);

    if (ok){
   (1)  cout<<word<<endl;
        words.push_back(word);
    }
}

for (int i = 0; i<words.size(); i++){
 (2)   cout<<words[i]<<endl;
}

}

Sa cztery slowa w pliku "wordlist_tests". Program na koncu powinien po prostu zapisac je do wektora a potem jego zawartosc wypisac na standardowe wyjscie. Problem jest nastepujacy:

  • jak kolwiek w linii (1) mam dowod, ze wszystkie slowa sa odczytane prawidlowo
  • w linii (2) vector okazuje sie byc pusty

teraz czesc interesujaca (prawdopodobnie tylko dla mnie ::):
sa dwa sposoby by problem zniknal:

  • po prostu usunac linie (3) (jakkolwiek, o ile mam racje, poniewaz parametr jest przekazywany do funkcji sort() poprzez wartosc, to zamienia dwie litery w zasadzie niezaleznej zmiennej, nie ma nic wspolnego z moim vectorem), lub:
  • zmiana warunku w petli while (4) na na przyklad:
int tmp = 0;
while (tmp < 5){
tmp++;
/..../

Co jest nie tak z tym kodem? Jak powinnam zapisac slowa do wektora z pliku nie rezygnujac z sortowania i z petli while? Nie moge tu znalezc zadnych zaleznosci (ok, widze, ze laczy te miejsca zmienna word, ale wciaz nie wiem w jaki sposob). Pomozecie?

0

Wstaw w różne miejsca wypisywanie rozmiaru wektora, np.

words.push_back(word);
cout << words.size() << endl;

bo to co opisujesz brzmi jak magia.

Po co jest bool ok?
Nic nie robisz z string sorted.

0

Problem rozwiazany dzieki uprzejmosci jednego z czlonkow spolecznosci stackoverflow. Wynika z faktu, ze wiekszosc edytorow tekstowych na koncu wstawia pusta linie, czyli pustego stringa (""). Ten natomiast wywala petle w funkcji sort (bo litery.lengh()-1 = -1).

1 użytkowników online, w tym zalogowanych: 0, gości: 1