Drzewko :)
Ostatnio zmodyfikowano 2010-05-19 20:31
bartek483 Temat założony przez niniejszego użytkownika |
Drzewko :) » 2010-05-19 18:17:01 Witamm Mam problem z drzewem wielowartosciowym, i nie wiem czy metoda WczytajPlik() jest niepoprawna czy Wyswietl(). Czy moglby ktos zerknac w moj kod i podpowiedziec? Z gory dzieki :)
#include "stdafx.h" #include <iostream> #include <conio.h> #include <fstream> #include <string> #include <vector>
using namespace std;
class NODE { public: NODE() { } NODE( std::string nazwa, const char typ ) : _nazwa( nazwa ) , _typ( typ ) { } void DodajWezel( std::string nazwa, std::string Rodzic, const char typ ); void Wyswietl( NODE * node ); void WczytajPlik( NODE * node ); ~NODE() { } private: vector < NODE * > _dzieci; std::string _nazwa; char _typ; std::string _nazwaSformatowana; };
void NODE::DodajWezel( std::string nazwa, std::string Rodzic, const char typ ) { if( Rodzic == _nazwa ) _dzieci.push_back( new NODE( nazwa, typ ) ); else for( size_t i = 0; i < _dzieci.size(); ++i ) _dzieci[ i ]->DodajWezel( nazwa, Rodzic, typ ); }
void NODE::Wyswietl( NODE * node ) { for( size_t i = 0; i < _dzieci.size(); ++i ) { for( size_t j = 0; j < _nazwa.size(); ++j ) { if( _nazwa[ j ] == '_' ) _nazwaSformatowana[ j ] = ' '; else _nazwaSformatowana[ j ] = _nazwa[ j ]; } } if( node->_typ == 'd' ) { cout << "+[ " << _nazwaSformatowana << " ]\n"; for( size_t i = 0; i < _dzieci.size(); ++i ) Wyswietl( node->_dzieci[ i ] ); } else if( node->_typ == 's' ) cout << "* " <<( node->_nazwa ) << '\n'; }
void NODE::WczytajPlik( NODE * node ) { ifstream plik; plik.open( "plik.txt", ios::in ); std::string _rodzic, _dziecko; char _typ; if( plik.good() ) { plik >> _dziecko; plik >> _rodzic; plik >> _typ; node = new NODE( _dziecko, _typ ); while( !plik.eof() ) { plik >> _dziecko; plik >> _rodzic; plik >> _typ; DodajWezel( _dziecko, _rodzic, _typ ); } cout << "Wczytano zawartosc pliku ..\n"; } else cout << "File not found .. \n"; plik.close(); }
int _tmain( int argc, _TCHAR * argv[] ) { NODE p; p.WczytajPlik( & p ); p.Wyswietl( & p ); _getch(); return 0; }
PS: Moglby jakis mod wstawic znaczniki? bo kurde znowu zapomnialem ;/ |
|
madmike44 |
» 2010-05-19 18:20:51 |
|
bartek483 Temat założony przez niniejszego użytkownika |
» 2010-05-19 18:38:20 Dzieki za znaczniki, a co do porgramu ma ktos jakis pomysl? |
|
malan |
» 2010-05-19 19:20:54 Coś namieszałeś z tą klasą. Funkcja wyświetl powinna wyglądać mniej więcej np. tak: void NODE::Wyswietl( void ) { std::cout << typ << ", " << nazwa << ", " << nazwaSformatowana; } Ty przesyłasz do niej obiekt i na nim coś próbujesz zrobić... Na dodatek jest to obiekt, którym tą funkcję wywołujesz. Coś nie tak chyba? :) Poczekaj na opinię kogoś z większym doświadczeniem, ale na moje to powinieneś to przebudować :). |
|
bartek483 Temat założony przez niniejszego użytkownika |
» 2010-05-19 20:31:49 Problem rozwiazany :D zmienilem metode wczytaj na : void WczytajPlik() { ifstream plik; plik.open( "plik.txt", ios::in ); std::string _Rodzic, _nazwaPod; char _typ; if( plik.good() ) { plik >> _nazwaPod; plik >> _Rodzic; plik >> _typ; NODE p( _nazwaPod, _typ ); while( !plik.eof() ) { plik >> _nazwaPod; plik >> _Rodzic; plik >> _typ; if( plik.eof() ) break; p.DodajWezel( _nazwaPod, _Rodzic, _typ ); } cout << "Poprawnie wczytano plik ..\n\n"; p.Wyswietl( & p ); } else cout << "Nie znaleziono pliku ..\n"; plik.close(); } |
|
« 1 » |