[ bane @ 19.06.2001. 20:27 ] @
Pocinjem da ucim programiranje u c++-u. Nabavio sam Borlandov C++ 5.02. Knjiga po kojoj sam poceo da ucim je Osnove jezika C++ od Stanely B. Lippmana. U predgovoru on je naveo da je kompletan kod izvrsen i u Visual C++ 5.0 koriscenjem Intelovog C++ kompajlera i u Visual C++ 6.0 koriscenjem Microsoftovog C++ kompajlera. On dalje navodi da ce se mozda morati malo modifikovati kod da bi se moglo kompajlirati na neko drugom sistemu. Kod pocetnih primera nisam imao probleme ali kod prvog primera u poglavlju Objektno zasnovano programiranje u njegovom prvom segmentu Kako se implementira klasa javio se problem. Kompajler je naravno preveo kod bez problema, ali program ne radi onako kako bi trebao. Naime kada se unesa neka recenica program bi trebao da javi koliko je procitano niski, dao ih ponovo prikaze samo u obrnuto redosledu, zatim da ih sve sa steka izbrise i navede da sada ima 0 elemenata na steku. Moj program ne moze da to uradi. On prihvata sve reci i to je sve. Kada sa izbrisao naredbu st.push(str) on je prikazao komentar Oops nijedan string nije procitan prekidam. I to naravno u slucaju kada upisem neki sadrzaj, posto sam izbrisao naredbu za ubacivanje na stek.Kada ne upisem nista na onda nema nikakvog prikaza. Kod je sledeci #include<string> #include<vector> using namespace std; class Stack{ public: bool push(const string&); bool pop(string &elem); bool peek(string &elem); bool empty() const{return _stack.empty();} bool full() const{return _stack.size()==_stack.max_size();} int size() const{return _stack.size();} private: vector<string> _stack; }; #include"Stack.h" bool Stack::pop(string &elem){ if (empty()) return false; elem=_stack.back(); _stack.pop_back(); return true; } bool Stack::peek(string &elem){ if(empty())return false; elem=_stack.back(); return true; } bool Stack::push(const string &elem){ if (full()) return false; _stack.push_back(elem); return true; } int main(){ Stack st; string str; while (cin>>str && ! st.full()) st.push(str); if(st.empty()){ cout<<'\n'<<"Oops nijedan string nije procitan prekidam\n"; return 0; } st.peek(str); if (st.size()==1 && str.empty()) { cout<<'\n'<<"Oops nijedan sring nije procitan prekidam\n"; return 0; } cout<<'\n'<<"procitano je"<<st.size()<<"niski!\n" <<"niske obrnuti redosledom: \n"; while (st.size()) if (st.pop(str)) cout<<str<< ' '; cout<<'\n'<<"sada ima"<<st.size() <<"elemenata na steku!\n"; } |