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

Wczytywanie słów z pliku tekstowego do tablicy.

Ostatnio zmodyfikowano 2009-06-23 21:09
Autor Wiadomość
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.
P-7931
DejaVu
» 2009-06-23 01:13:03
Sortowanie przez wybieranie

Jeś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ć:
C/C++
std::string wiersz;
getline( plik, wiersz );
Jeśli wyrazy są oddzielone białymi znakami:
C/C++
std::string wyraz;
plik >> wyraz;
Zmienna plik to:
fstream plik;
Resztę w kursie doczytasz.
P-7933
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...

C/C++
#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?
P-7939
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...
P-7941
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.
P-7942
pekfos
» 2009-06-23 14:00:15
używaj
C/C++
#include <cstdio>
#include <iostream>
#include <cstdlib>
zamiast
C/C++
#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++
P-7945
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

C/C++
#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:

C/C++
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ć?
P-7946
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 );
P-7948
« 1 » 2
  Strona 1 z 2 Następna strona