// laske3.cpp // Laskee tiedostossa olevien sanojen lukumaaran // Toteutus dynaamisella osoitintaulukolla // Projektiin: laske.cpp, ALI\mjonotpp.cpp, ALI\mjonot.c (, ALI\vstring.cpp) // 14.3.2000/vl // #include #include #include using namespace std; #include "mjonotpp.h" class cSana { string teksti; int lkm; public: cSana() { teksti = ""; lkm = 0; } void aseta(const string &s) { teksti = s; lkm = 1; } int oletko(const string &mika) const { if ( teksti == mika ) return 1; return 0; // return teksti == mika; } void lisaa() { lkm++; } void tulosta(ostream &os) const { os << teksti << " = " << lkm << "\n"; } }; const MAX_SANOJA = 10; class cSanat { int max_lkm; int lkm; cSana **alkiot; void operator=(const cSanat &) { } cSanat(const cSanat &) { } // public: cSanat(int imax_lkm=MAX_SANOJA) { lkm = 0; alkiot=new cSana *[imax_lkm]; // M max_lkm = imax_lkm; } ~cSanat() { for (int i=0; ioletko(s) ) { // M alkiot[i]->lisaa(); return; } } if ( lkm >= max_lkm ) return; alkiot[lkm] = new cSana; // U alkiot[lkm]->aseta(s); // alkiot[lkm].lisaa(); lkm++; } void cSanat::lisaa_rivi(string rivi) { string sana; while ( rivi != "" ) { sana = erota(rivi,' '); lisaa(sana); } } void cSanat::lue_tiedosto(const string &nimi) { ifstream fi(nimi.c_str()); if ( !fi ) return; string rivi; while ( getline(fi,rivi) ) lisaa_rivi(rivi); // k„sittele rivi } void cSanat::tulosta(ostream &os) const { for (int i=0; itulosta(os); } int main(void) { cSanat sanat; sanat.lue_tiedosto("sanat.txt"); sanat.tulosta(cout); return 0; } #if 0 int main(void) { cSanat sanat; string s("kissa"); sanat.lisaa(s); // sin(x); // string virhe = sanat.lisaa(s); // if ( virhe != "" ) cout << virhe << "\n"; sanat.lisaa("kissa"); sanat.lisaa("kissa"); sanat.lisaa("kissa"); sanat.lisaa("koira"); sanat.tulosta(cout); return 0; } #endif #if 0 int main(void) { cSana sana; sana.aseta("kissa"); string s("issa"); if ( sana.oletko(s) ) sana.lisaa(); sana.tulosta(cout); // y = sin(x); www return 0; } #endif