Ĺadny brzuch
Potrzebuję stworzyć dwuwymiarową tablicę typu char. Problem jest mniej więcej taki:
z pliku .txt czytam kilka stringów np. imion i te imiona chcę umieścić w tablicy i potem odwoływać się do nich przy pomocy indexu tablicy.
Czyli coś w stylu:
FILE *fp;
char imiona[dlugosc chara][index poprzez który chcę się odwołać do elementów tablicy];
fp=fopen("imiona.txt","r");
for(int i=0;i<n;i++)
fscanf(fp,"%s",imiona[][i]);
i teraz jak wypisze imiona[][0] to sie pierwsze imię powinno wypisać
Czy coś takiego jest możliwe w C,C++?
Czy coś takiego jest możliwe w C,C++?
Jest mozliwe.
@down: a co wiecej napisac? Odpowiedzialem na jego pytanie
Użytkownik icek edytował ten post 09 kwiecień 2007, 11:01
icek - nie ma to jak wyczerpujaca odpowiedz ;)
dwa sposoby:
1) najpierw zbadac dlugosc pliku, a pozniej dynamicznie stworzyc tablice jak wskaznik
2) uzyc vector z STL i dodawac po jednym
1) najpierw zbadac dlugosc pliku, a pozniej dynamicznie stworzyc tablice jak wskaznik
mogłbyś napisać w jaki sposób umieścić w tablicy slowa przeczytane z pliku?
załóżmy, że w pliku .txt mam takie słowa:
slowoA
slowoB
slowoC
thx:)
#include <iostream> #include <vector> #include <string> #include <fstream> #include <algorithm> #include <iterator> using namespace std; int main() { vector<string> slowa; fstream plik; string nazwa_pliku,tmp; cout << "podaj nazwe pliku: " ; cin >> nazwa_pliku; plik.open(nazwa_pliku.c_str(),ios::in); if( plik.is_open() ) { while(1) { plik >> tmp; if( plik.eof() ) break; slowa.push_back(tmp); } plik.close(); } copy( slowa.begin(), slowa.end(), ostream_iterator<string>(cout,"\n") ); return 0; }
// edit : zamiast tej petli mozna chyba cos takiego:
if( plik.is_open() ) { copy( istream_iterator<string>(plik), istream_iterator<string>(), back_inserter(slowa) ); plik.close(); }
prosciej i szybciej ;D
Użytkownik icek edytował ten post 09 kwiecień 2007, 12:32
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
z pliku .txt czytam kilka stringów np. imion i te imiona chcę umieścić w tablicy i potem odwoływać się do nich przy pomocy indexu tablicy.
Czyli coś w stylu:
FILE *fp;
char imiona[dlugosc chara][index poprzez który chcę się odwołać do elementów tablicy];
fp=fopen("imiona.txt","r");
for(int i=0;i<n;i++)
fscanf(fp,"%s",imiona[][i]);
i teraz jak wypisze imiona[][0] to sie pierwsze imię powinno wypisać
Czy coś takiego jest możliwe w C,C++?
Czy coś takiego jest możliwe w C,C++?
Jest mozliwe.
@down: a co wiecej napisac? Odpowiedzialem na jego pytanie
Użytkownik icek edytował ten post 09 kwiecień 2007, 11:01
icek - nie ma to jak wyczerpujaca odpowiedz ;)
dwa sposoby:
1) najpierw zbadac dlugosc pliku, a pozniej dynamicznie stworzyc tablice jak wskaznik
2) uzyc vector z STL i dodawac po jednym
1) najpierw zbadac dlugosc pliku, a pozniej dynamicznie stworzyc tablice jak wskaznik
mogłbyś napisać w jaki sposób umieścić w tablicy slowa przeczytane z pliku?
załóżmy, że w pliku .txt mam takie słowa:
slowoA
slowoB
slowoC
thx:)
#include <iostream> #include <vector> #include <string> #include <fstream> #include <algorithm> #include <iterator> using namespace std; int main() { vector<string> slowa; fstream plik; string nazwa_pliku,tmp; cout << "podaj nazwe pliku: " ; cin >> nazwa_pliku; plik.open(nazwa_pliku.c_str(),ios::in); if( plik.is_open() ) { while(1) { plik >> tmp; if( plik.eof() ) break; slowa.push_back(tmp); } plik.close(); } copy( slowa.begin(), slowa.end(), ostream_iterator<string>(cout,"\n") ); return 0; }
// edit : zamiast tej petli mozna chyba cos takiego:
if( plik.is_open() ) { copy( istream_iterator<string>(plik), istream_iterator<string>(), back_inserter(slowa) ); plik.close(); }
prosciej i szybciej ;D
Użytkownik icek edytował ten post 09 kwiecień 2007, 12:32