C++ wczytywanie i zapisywanie wierszy do pliku. Mały problem.

Odpowiedz Nowy wątek
2011-08-09 00:52
adx
0

Mam tu taki mały problem, a mianowicie chodzi o program, który w pliku o 200 wierszach (5 wyrazów oddzielone spacjami w każdym wierszu) wyszukuje te wiersze, w którym wyrazy mają tyle samo liter. Wszystko ładnie już zrobione tylko problem mam w tym, żeby te wiersze, w którym długość słów jest taka sama były zapisywane do pliku, zamiast wypisywać w konsoli "tak". Bardzo proszę tylko o dopisanie linijki kodu, żeby program chodził prawidłowo. Męczyłem się z getline, ale mi nie wychodziło:).

Oto całość kodu: http://www.nopaste.pl/13dm

Pozostało 580 znaków

2011-08-09 01:17
0

getline jak sama nazwa wskazuje pobiera linię. Po prostu zamiast cout daj wy.

Pozostało 580 znaków

2011-08-09 08:14
0

Zauważyłem w kodzie, że zmieniasz zmienną iteracyjną (a), żeby przerwać pętlę. Nie jest to dobra praktyka. Lepiej użyć instrukcji break.

Pozdrawiam.

Kwestia gustu niektórzy anty-goto maniacy zalecają właśnie tak pisać. - msm 2011-08-09 22:41
Wg mnie jest to nie dość, że mniej czytelne, to wolniejsze. Co do samego goto to używam go do wychodzenia z pętli dwu poziomowych (i mimo, że w niektórych innych przypadkach mógłby być szybszy to jestem jakoś nieprzekonany do używania go). Jak ludzie teraz nie uczą się programowania na BASICu, to nie ma dużego problemu z nadużywaniem goto (tzn. z ludźmi nadużywającymi goto). - Zjarek 2011-08-10 01:50

Pozostało 580 znaków

2011-08-09 22:47
adx
0

Próbowałem wy<<plik.getline(xxx)<<endl; wiele razy, tylko nie mam pojęcia co podać jako argumenty tej funkcji getline, żeby poprawnie chodziło. Czy mógłby ktoś mi napisać całą tą linijkę:). Serrus dzięki za radę na pewno już będę już korzystał z instrukcji break :).

Zajrzyj do dokumentacji. Po to ona jest. - Kumashiro 2011-08-10 01:15

Pozostało 580 znaków

2011-08-10 09:33
0

są dwa getline'y: funkcja globalna i metoda w klasie stream. pierwsza operuje na stringu, druga na char*.
PS. jest jeszcze trzeci, w standardzie POSIX, z automatyczną alokacją pamięci pod char*.

edytowany 1x, ostatnio: Azarien, 2011-08-10 09:36

Pozostało 580 znaków

2011-08-11 12:26
0

Widze ze robisz zadanie z matury :), mam zrobione zadania z matur gdzies na mailu na 6 z programowania. Jak bedzie problem to moge rzucic kawalkiem kodu na priv ;p


non omnis moriar i tyle :-)

Pozostało 580 znaków

2011-08-11 17:44
0

Yo! Jeżeli dobrze zrozumiałem to co napisałeś, to żeby w Twoim kodzie dodać wypisywanie całych wierszy, które spełniają kryterium, musiałbyś dodać tablice w której te słowa zapamiętasz. Nudzę się dziś, więc wyczarowałem trochę kodu. Jeżeli chcesz sam do tego dojść to nie zaglądaj w link ;)

http://www.nopaste.pl/13fb

edytowany 1x, ostatnio: madmike, 2011-08-11 19:45

Pozostało 580 znaków

2011-08-12 09:17
0

@up: źle obsługujesz koniec pliku, poczytaj dokładnie jak działa eof(), to powinno być czymś w tym stylu:

void cw3() {
    ifstream in("tekst.txt");
    ofstream out("odpowiedz.txt");
    string linia;
    while(getline(in, linia)) {
        istringstream slinia(linia);
        string slowo;
        while(linia >> slowo) {
              ...
        }
    }
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Wziąłem pod uwagę Twoją propozycje i dalej nie widzę błędu w moim kodzie. Co jest dokładnie złego w moim sprawdzaniu końca pliku ? - Atael 2011-08-12 10:50
eof() znaczy dosłownie: nastąpiła próba czytania poza końcem pliku, ergo twój kod będzie próbował wczytać kolejną linię po tej ostatniej i powtórzy dwa razy wynik z ostatniej linii. Wszyscy początkujący z STL popełniają ten błąd. - MarekR22 2011-08-12 11:12
Wierzę Ci na słowo. Powiedz mi, odpalałeś mój kod ? Przetestowałem teraz kolejny raz i nie powtarza ostatniej lini. Zakładam, że linie mają po te 5 wyrazów. - Atael 2011-08-12 11:26
bo zapewne w swoim pliku wejściowym umieściłeś w ostatniej linijce wyrazy o różnej długości, a ty wtedy nic nie wypisujesz i nie widzisz w swoich wynikach błędu. Wprowadź do pliku wejściowego tylko 1 linijkę z 5 takimi samymi wyrazami i zobacz co się stanie. - MarekR22 2011-08-12 12:53
Raportuje, że taki test daje poprawne wyniki. Wykonałem go przed wysłaniem kodu, jak i teraz dla pewności : > Dalej nie widzę czegoś co potwierdzi niepoprawność mojego kodu. - Atael 2011-08-12 16:02

Pozostało 580 znaków

2011-08-13 00:07
adx
0

Wielkie dzięki Ateal. Rozwiązałem swój problem dokładnie tak jak mówiłeś, ale Twój kod jest o wiele "łatwiejszy" dla oka:). Arasso12 masz racje zadanie z maturki, jak nie będę jakiegoś zadania pewny po napiszę do Ciebie to najwyżej mi podeślesz:). Tylko jak dla mnie trochę mało czasu na napisanie dwóch programów w 50 min, gdzie ten to jest łatwiejszy. Dzięki wszystkim za zainteresowanie tematem.

@Arasso12 i innych co pisali maturę z infy: Pisałeś może maturę z infy? Jak Ci poszła? I z czego się uczyłeś? Chodzi oczywiście o poziom rozszerzony.

Pozostało 580 znaków

2011-08-13 19:59
0

Ja pisałem maturę z infy rok temu i udało mi się wyciągnąć 93 punkciory. Zjedli mi punkty za accesa. Większości nauczyli mnie na informatyce, co może być rzadko spotykane ;) Rozmawiając o maturze nie offtopujemy za bardzo ?

JA pisałem w tym, ale z office używałem tylko Excela bo dało się w nim spokojnie wszystko zrobić, oczywiście poza zadaniem w którym trzeba było napisać program^^ - ujemny 2011-08-16 10:31

Pozostało 580 znaków

2011-08-15 23:37
adx
0

@ Ateal: Matura z infy była Ci gdzieś potrzebna (studia)?

Pokaż pozostałe 11 komentarzy
A jakie zadania na zaliczenie trzeba napisać u Was? Możesz podać jakieś przykłady? - adx 2011-08-18 20:45
Ze struktur danych to takie podstawy jak: lista, stos,kolejka,sterta.Z drzew tylko BST. Z algorytmów to oczywiście podstawowe sortowania (bąbelki, wstawianie,wybór,radix,qsort, scalanie) oraz jakieś proste dynamiki. Nie było żadnych tekstowych. - Atael 2011-08-18 20:59
Czy dużo uczycie się na komputerach? Czy większość to wykłady jak na lekcji historii? Z jakiego systemu korzystacie (Ubuntu, FreeBSD, Windows 7)? - adx 2011-08-19 00:21
Wszystko co wymaga praktyki jest w pracowni z komputerami. Wykłady oczywiście są na sali z rzutnikiem. Z systemów mamy kilka windowsów(ze 3 w tym siódemkę) oraz ze dwa linuxy. Nie wnikałem dokładnie bo jedyne czego potrzebowałem to działające środowiska/kompilatory :D - Atael 2011-08-19 01:22
Wielkie dzięki za informacje na pewno mi to pomoże przy podejmowaniu decyzji. Jak będę miał pytania odnośnie Informatyki na UJ to napiszę do Ciebie. Mam jeszcze cały rok na wybranie uczelni (UJ a AGH a PK). Dzięki i powodzenia na kolejnym roku. :D - adx 2011-08-20 19:29

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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