Mint42 Temat założony przez niniejszego użytkownika |
Wczytywanie słów z pliku tekstowego do tablicy. » 2009-06-23 00:49:24 Witam, ogólnie rzecz biorąc mam do wykonania następujące zadanie: Posortuj słowa wczytane z pliku w porządku odwrotnym do alfabetycznego algorytmem przez wybieranie.
Przeglądałem z grubsza artykuły, ale ciężko mi na ich podstawie napisać program który wczytuje pojedyncze słowa do tablicy (pewnie to jest proste, ale z programowania jestem jeszcze zielony). Na początku proszę Was o pomoc w rozwiązaniu tego problemu. Najbardziej pomocny będzie dla mnie kod z dosyć szczegółowymi komentarzami. Będę bardzo wdzięczny za pomoc. |
|
DejaVu |
» 2009-06-23 01:13:03 Sortowanie przez wybieranieJeśli jesteś zielony z programowania - poczytaj kurs C++. W nim jest również taki rozdział jak Obsługa plików, C++, który pomoże Ci zrealizować Twoje zadanie. Jeśli słowa są zapisane każdy w jednym wierszu możesz użyć: std::string wiersz; getline( plik, wiersz ); Jeśli wyrazy są oddzielone białymi znakami: std::string wyraz; plik >> wyraz; Zmienna plik to: fstream plik; Resztę w kursie doczytasz. |
|
Mint42 Temat założony przez niniejszego użytkownika |
» 2009-06-23 12:43:40 Chcę wczytać rozmiar tabeli i wprowadzić do niej słowa oddzielone białymi znakami, a następnie wydrukować zawartość tabeli. ... Nie działa zupełnie... #include <fstream> #include <stdio.h> #include <iostream.h> #include <stdlib.h>
void drukuj( int * tabela, int n );
int main() { int * tabela; int n, i,; char buf[ 25 ]; std::fstream plik; plik.open( "C:\tekst.txt", std::ios::in | std::ios::out ); printf( "Podaj rozmiar tabeli\n" ); scanf( "%24s", buf ); n = atoi( buf ); tabela =( int * ) malloc( n * sizeof( int ) ); for( int i = 1; i <= n; i++ ) { std::string tabela; plik >> tabela; } plik.close(); drukuj( tabela, n ) return( 0 ); } void drukuj( int * tabela, int n ) { int i; for( i = 0; i < n; i++ ) printf( "%d\t", tabela[ i ] ); }
Dzięki za podpowiedź :) ...a wiesz może co tu jest źle? |
|
WunM |
» 2009-06-23 13:05:33 Bo użyłeś znacznika [i]. Kod wstawiaj w [code src="C++"][/code].
Co do kodu to piszesz w C czy C++ (z tego co widzę w C...). Chcesz odebrać elementy od użytkownika a w kodzie wczytujesz je z pliku... Zmiennej tabela później nie użyjesz... |
|
Mint42 Temat założony przez niniejszego użytkownika |
» 2009-06-23 13:13:42 Wszystko jedno czy w C czy w C++ =] Pewnie lepiej w C++ się uczyć? Słowa chcę wczytać z pliku do tabeli. Pomóżcie proszę, nie wiem jak zrobić by to działało. |
|
pekfos |
» 2009-06-23 14:00:15 używaj #include <cstdio> #include <iostream> #include <cstdlib>
zamiast #include <stdio.h> #include <iostream.h> #include <stdlib.h>
i tabela = new int[ n ]; zamiast tabela =( int * ) malloc( n * sizeof( int ) ); skoro piszesz w C++ |
|
Mint42 Temat założony przez niniejszego użytkownika |
» 2009-06-23 14:42:30 Pozmieniałem całość nieco. po pierwsze z int na char bo tablica ma przechowywać słowa. Niestety nadal nie działa dobrze #include <fstream> #include <cstdio> #include <iostream> #include <cstdlib>
void drukuj( char * tabela, char n );
int main() { char * tabela; char i; char n; char buf[ 24 ]; std::fstream plik; plik.open( "C:\tekst.txt", std::ios::in | std::ios::out ); printf( "Podaj rozmiar tabeli\n" ); scanf( "%24s", buf ); n = atoi( buf ); tabela = new char[ n ]; for( char i = 1; i <= n; i++ ) { std::string tabela; plik >> tabela; } plik.close(); drukuj( tabela, n ); system( "pause" ); return 0; } void drukuj( char * tabela, char n ) { char i; for( i = 0; i < n; i++ ) printf( "%d\t", tabela[ i ] ); }
Ale nadal nie działa to dobrze, wydaje mi się ze problem leży tutaj: for( char i = 1; i <= n; i++ ) { std::string tabela; plik >> tabela; }
Nie jestem pewien czy w forze potrzebny jest typ char i co ważniejsze skoro ma w pętli ładować słowa do tabeli to chyba musi każde słowo pod kolejny element tabeli, a to chyba tak nie jest. Jak to poprawić? |
|
DejaVu |
» 2009-06-23 15:13:55 Chciałbym zauważyć, że rozmiaru pliku nie znasz ani ile wierszy on będzie miał. W konsekwencji musisz go przeszukać albo 2 razy - 1 raz -> zliczyć ilość wyrazów i utworzyć tablicę, 2 raz -> zapisać wyrazy do tablicy. Druga opcja to mieć strukturę (np. listę dwukierunkową) w której dodajesz elementy na końcu i żadnego problemu nie ma z limitem danych. Trzecia opcja to użycie STL'a (kontenera), np. std::vector<std::string> do którego wrzucasz po prostu wiersze i posługujesz się jak zwykłą tablicą z tą różnicą, że sama się 'powiększa' wykonując operację push_back(). Podałem Ci jak wczytać wiersz z pliku lub wyraz z pliku dużo wcześniej. Cała reszta to de'facto utworzenie tablicy odpowiedniego rozmiaru tablicy zawierającej napisy, wczytanie za pomocą pętli danych i umiejętne wykorzystanie kodu z wikipedii do ich posortowania. /edit: plik.open( "C:\tekst.txt", std::ios::in | std::ios::out ); zamień na: plik.open( "C:/tekst.txt", std::ios::in ); |
|
« 1 » 2 |