[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Wszystko co dotyczy tworzenia i optymalizacji stron internetowych oraz programowania
Awatar użytkownika
Dżon Lemon

Użytkownik
Posty: 48
Rejestracja: 25 sie 2010, 22:53

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post15 sty 2011, 23:55

Witam!

Potrzebuję pomocy przy wczytywaniu z pliku tekstowego do tablicy stringów.

string slowa[10];
FILE *fp;
fp=fopen("plik.txt", "r");
for (int i=0;i<10;i++)
{
fscanf(fp,????niewiemcotutaj :D,slowa[i]);
}
for (int i=0;i<10;i++)
{
cout<<slowa[i];
}
fclose(fp);

Nie wolno mi używać fstream.

Awatar użytkownika
Lena

Globalny Moderator
Posty: 4554
Rejestracja: 10 lut 2009, 19:42
Lokalizacja: Sz-n

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 00:03

????niewiemcotutaj

Kod: Zaznacz cały

 "%s "

Awatar użytkownika
Dżon Lemon

Użytkownik
Posty: 48
Rejestracja: 25 sie 2010, 22:53

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 00:40

Próbowałem tak, ale program się wtedy zawiesza :/.

Awatar użytkownika
cosik_ktosik

Administrator
Posty: 21409
Rejestracja: 13 lis 2008, 01:17
Lokalizacja: Szczecin
Kontaktowanie:

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 02:09

Może się tutaj pojawiać problem nieciągłości stringa, wrzucaj najpierw do vector (stworzony bufor będzie ciągły), a potem przeszukując vector skopiuj zawartość do właściwego stringa.
Hotfix
Pozdrawiam, cosik_ktosik :)

mir

Stały bywalec
Posty: 617
Rejestracja: 01 kwie 2009, 15:23

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 13:35

Widzę że piszesz w C++, a używasz funkij z C, co nie jest złe. Nie mniej jednak proponuję, użycie nagłówka fstream.h z C++

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char *argv[])
{
    string slowa[10];
    ifstream plik("plik.txt");

for (int i=0;i<10;i++)
{
plik>>slowa[i];
}
for (int i=0;i<10;i++)
{
cout<<slowa[i]<<" ";
}

   
    return 0;
}

Awatar użytkownika
Dżon Lemon

Użytkownik
Posty: 48
Rejestracja: 25 sie 2010, 22:53

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 17:39

Mam problem z tymi wektorami. Jeżeli dobrze rozumiem, to mam zrobić coś takiego:

vector <string> wektor;

ale wyskakuje błąd:`vector' undeclared (first use this function)

@mir, dzięki za pomoc, ale nie wolno mi używać fstreama.

mir

Stały bywalec
Posty: 617
Rejestracja: 01 kwie 2009, 15:23

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 18:38

musisz dołączyć plik nagłówkowy

Kod: Zaznacz cały

#include <vector>

oraz nad funkcją main dodać

Kod: Zaznacz cały

using namespace std;

"zapowiadasz" standardową przestrzeń nazw

Awatar użytkownika
cosik_ktosik

Administrator
Posty: 21409
Rejestracja: 13 lis 2008, 01:17
Lokalizacja: Szczecin
Kontaktowanie:

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 18:50

Tak deklarujesz

Kod: Zaznacz cały

vector<char> bufor(100, '\0');


Oczywiście na samym początku

Kod: Zaznacz cały

#include <vector>
Hotfix
Pozdrawiam, cosik_ktosik :)

Awatar użytkownika
Dżon Lemon

Użytkownik
Posty: 48
Rejestracja: 25 sie 2010, 22:53

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 19:02

Dzięki, błędu już nie ma.
Teraz pytanie, jak wczytać z pliku do wektora (fscanf(fp,"%s",wektor);)oczywiście nie działa.

mir

Stały bywalec
Posty: 617
Rejestracja: 01 kwie 2009, 15:23

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 19:12

zerknij na funkcję fgets(), bo nie wiem czy spełni ona Twe oczekiwania

Awatar użytkownika
cosik_ktosik

Administrator
Posty: 21409
Rejestracja: 13 lis 2008, 01:17
Lokalizacja: Szczecin
Kontaktowanie:

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 21:16

Teraz pytanie, jak wczytać z pliku do wektora (fscanf(fp,"%s",wektor);)oczywiście nie działa.


echh ale zobacz jak się tego używa. Teraz wczytujesz pod adres, a więc użyj &
To jedno, a drugie nie wektor, a bufor.

Kod: Zaznacz cały

vector<char> bufor(100, '\0');


Ale żeby dostać adres (referencję) musisz pokazać na pierwszy element (teraz wektor ma 100 elementów). Do tego służy front(): Dostępne tylko dla zarejestrowanych użytkowników

Zatem złożymy to i mamy &bufor.front()

To spowoduje zapisanie wektora, ale aby przepisać go do stringa, trzeba będzie najpierw znaleźć początek i koniec wektora. Do tego służą begin() end() oraz find(). Teraz poszukaj proszę ich specyfikacji i zobacz jak się ich używa.

-- N, 16 sty 2011, 21:16 ---

PS fgets() na stringu spowoduje to samo co fscanf, niestety problem nieciągłości stringa.
Hotfix
Pozdrawiam, cosik_ktosik :)

Awatar użytkownika
Dżon Lemon

Użytkownik
Posty: 48
Rejestracja: 25 sie 2010, 22:53

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 22:50

Cosik, zrobiłem już to za pomocą fgets (wczytując do tablicy charów), a następnie przenosząc do wektora (a na końcu do stringa). I wszystko wydaje się działać w porządku. Na czym polega problem nieciągłości stringów?

Dziękuję wszystkim za odpowiedzi :).

Awatar użytkownika
cosik_ktosik

Administrator
Posty: 21409
Rejestracja: 13 lis 2008, 01:17
Lokalizacja: Szczecin
Kontaktowanie:

[C++]Wczytywanie z pliku tekstowego do tablicy stringów

Post16 sty 2011, 23:09

Cosik, zrobiłem już to za pomocą fgets (wczytując do tablicy charów), a następnie przenosząc do wektora (a na końcu do stringa). I wszystko wydaje się działać w porządku.

Jest tylko jedna rzecz, wszystko będzie zależało od implementacji danego kompilatora. Nie zawsze musi działać, chociaż fgets może tu być wyjątkiem, nie sprawdzałem specyfikacji tutaj.

Ale skoro już Masz rozwiązanie to podam inne, z pewnością też zadziała i to zawsze, więc warto przestudiować (wcięcia przy wklejaniu wcięło)

Kod: Zaznacz cały

#include <iostream>
#include <vector>

using namespace std;

int main(){
string slowa[10];
FILE *fp;
int i;
vector<char> bufor(100, '\0');
fp=fopen("test.txt", "r");
for (i=0;i<3;i++)
{
fscanf(fp,"%s ",&bufor.front());
string temp(bufor.begin(), find(bufor.begin(), bufor.end(), '\0'));
slowa[i]=temp;
}
for ( i=0;i<3;i++)
{
cout<<slowa[i]<<" ";
}
fclose(fp);
return (0);
}
Hotfix
Pozdrawiam, cosik_ktosik :)



  • Reklama

Wróć do „Webmastering i programowanie”



Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości