Dzień dobry, a w sumie kolejny nerwowy bo już myślałem że skończe pisać pierwszy program z tych od cke ale jednak wymieklem. miesiac nauki za mna jednak wystartuje z c++ na maturze a nie c# ^^
no więc mamy 1001 wierszy z różnymi dużymi literami od a do j ostatni jest pusty wiec zostaje 1000, wiec nie moge sobie poradzic z:
-
wczytaniem tego litera po literze do dynamicznie(tylko wiersze) stworzonej tablicy.
-
dynamiczna kolumny do tablicy... jaki blad? hmm brak wskaznikow?
no to moze jakies wskazowki ;] -
czy zeby stworzyc tablice wskaznikow do tablicy czar bez uzywania listy to czy potrzebuje zrobic dany ruch 2 razy? raz zeby zdobyc tab = new czar*[wiersze] a pozniej tab[wiersze] = new char [kolumny]
Dziękuję z góry za każdą podpowiedź
ex.
BFDAFBCCGBDIIEDCJAACDF
ADFBJADEAJAAD
EFCCCEBFFCBABEAEBAFGC
HGCDCECECADBFCBAGH
BDAEDDAEIICFDEFAADEAF
CIEAEG
Code.
#define IN 1
#define OUT 0
#define MAX 25
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <fstream>
#include <new>
#include <cstdio>
using namespace std;
int main(int argc, char argv[])
{
//tu nie ma jeszcze char* temp
int i = 0, j =0, i_w = 0, i_k = 0;
char c;
char** wiersze = NULL;
short* kolumny = NULL;
ifstream wejscie("dane.txt");
//odczytuje jak duza ma byc tablica do wskaznikow char
if(!wejscie)
return -1;
else{
while(!wejscie.eof())
if((wejscie.get()) == '\n')
i_w++;
wejscie.close();
cout << "Odczytałem:" << i_w << " wyraz z pliku\n";
}
// buduje tablice wskaznikow
try
{
wiersze = new char *[i_w];
}
catch(bad_alloc)
{
cout << "nie ma miejsca w pamieci\n";
}
cout << "Odczytałem:" << i_w << " wyrazów\n";
//to mi tez wypier.. blad hmmm "segmentation fault"
/*wejscie.open("dane.txt");
wejscie.clear();
wejscie.seekg(+OUT,ios_base::beg);
while(!wejscie.eof()){
if((wejscie.get()) == '\n'){ // zawsze przechodzi do else? wtf
i++;
try
{
wiersze[i] = new char [i_k];
}
catch(bad_alloc)
{
cout << "nie ma miejsca w pamieci\n";
}
try
{
kolumny = new short [i];
}
catch(bad_alloc)
{
cout << "nie ma miejsca w pamieci\n";
}
kolumny[i] = i_k;
i_k=0;
}
else
i_k++;
}*/
//wyrazy w dane.txt maja max 25 daje 26 zeby dac '\0' na koncu
for(i=0; i<i_w; i++)
try
{
wiersze[i] = new char [MAX+1];
}
catch(bad_alloc)
{
cout << "nie ma miejsca w pamieci\n";
}
//resetuje wskaznik do pliku i chyba wczytuje znaki do tablicy oO
i=0;j=0;
wejscie.open("dane.txt");
wejscie.clear();
wejscie.seekg(+OUT,ios_base::beg);
while(!wejscie.eof()){
c = wejscie.get();
if(c == '\n'){
wiersze[i++][j] = '\0'; // po 21 ruchach daje '\n' gdzie pierwszy wyraz ma 22
else
wiersze[i][j++] = c;
}
wejscie.close();
// a tu juz w ogole nie mam dostepu do pamieci ;]
for( i= 0; i< i_w; i++ && putchar('\n'))
for( j= 0; j != '\n'; j++)
putchar(wiersze[i][j]);
// tu chyba ladnie wszystko usuwam
for(i= 0; i< i_w; i++)
delete [] wiersze[i];
delete [] wiersze;
delete [] kolumny;
// tu bedzie jeszcze czesc analizy tablic anagramow,
//kopiowanie do tempa jezeli sa dobre i zapisanie do pliku.. help
cout << "Odczytałem:" << i_w << " wyrazów\n";
system("PAUSE");
return EXIT_SUCCESS;
}