// lassanat.cpp // 13.3.2001/Vesa Lappalainen // // Ohjelma laskee kuinka monta kertaa kukin tiedostossa // oleva sana esiintyy // Tiedosto koostu riveist„, jolla kullakin rivill„ voi olla // useita toisistaan v„lily”nneill„ erotettuja sanoja. // // 1) Miten sanat lasketaan // 2) Tarvitaan luokat // 3) Luokan sanat tehtäväviin kuuluu // 4) Luokan sana tehtäväviin kuuluu // 5) Ensin suunnitellaan (pääohjelma) Top down. Ensin kirjoitetaan. // 6) Valitse pääohjelman lauseet // - laita pääohjelma #ifdefiin // 7) Ensin testataan (cSana) Bottom up. Mikä testataan ensin. // 8) Metodit cSana // - kirjoita testipääohjelma cSana:lle // 9) cSana attribuutit // 10) attribuuttien tyypit järjestyksessä // 11) cSana konstruktorin tyyppi ja parametrit // 12) cSana konstruktorin sisältö // 13) aseta tyyppi ja parametrit // 14) cSana aseta sisältö // 15) lisaa tyyppi ja parametrit // 16) cSana::lisaa sisältö // 17) Mihin metodeihin tulee const? // - testaa cSana // 18) Metodit cSanat (julkiset) // 19) cSanat attribuutit (kysy ensin julkiset, sitten oikein) // 20) attribuuttien tyypit järjestyksessä // - kirjoita testipääohjelma cSanat // 21) cSanat::lisaa metodin tyyppi ja parametrit // 22) cSanat::lisaa, millä silmukalla etsitään // 23) cSanat::lisaa metodin tyyppi ja parametrit // 24) cSanat::lisaa_rivi, millä rivi käsitellään // 25) Mihin metodeihin tulee const? // - testaa cSanat // 26) cSanat::lue_tiedosto - millä silmukalla // 27) Miten fi.close() // - testaa oikea pääohjelma /* Tarvitaan luokat: cSana - tunnistaa onko sana - laskuri cSanat - tiedoston lukeminen - rivin jakaminen osiin - etsiä sana ja lisätä laskuria - lisätä sana jos sitä ei vielä ole */ #include #include #include using namespace std; #include "mjonotpp.h" class cSana { int lkm; string teksti; public: cSana() : lkm(0),teksti("") { } void aseta(const string &s) { teksti = s; lkm = 1; } void tulosta(ostream &os) const { os << teksti << " = " << lkm << "\n"; } void lisaa() { lkm++; } int oletko(const string &mika) const { if ( teksti == mika ) return 1; return 0; } }; const MAX_LKM = 5; class cSanat { int max_lkm; int lkm; cSana alkiot[MAX_LKM]; public: cSanat() { lkm = 0; max_lkm = MAX_LKM; } void tulosta(ostream &os) const; void lisaa(const string &s); void lisaa_rivi(string rivi); void lue_tiedosto(const string &tied); }; void cSanat::tulosta(ostream &os) const { for (int i=0; i= max_lkm ) return; alkiot[lkm].aseta(s); lkm++; } void cSanat::lisaa_rivi(string rivi) { string sana; while ( rivi != "" ) { sana = erota(rivi,' '); if ( sana != "" ) lisaa(sana); } } void cSanat::lue_tiedosto(const string &tied) { ifstream fi(tied.c_str()); if ( !fi ) return; string rivi,sana; while ( getline(fi,rivi ) ) lisaa_rivi(rivi); // k„sittele rivi } #if 0 int main(void) { cSanat sanat; string s = "kissa"; cout << "---------------\n"; sanat.lisaa(s); sanat.lisaa("kissa"); sanat.lisaa("kana"); sanat.lisaa_rivi("kissa istuu puussa ja koira istuu maassa"); sanat.tulosta(cout); return 0; } #endif #if 0 int main(void) { cSana sana; cout << "---------------\n"; sana.aseta("kissa"); sana.tulosta(cout); if ( sana.oletko("kissa") ) sana.lisaa(); sana.tulosta(cout); if ( sana.oletko("kana") ) sana.lisaa(); sana.tulosta(cout); return 0; } #endif #if 1 int main(void) { cSanat sanat; sanat.lue_tiedosto("sanat.txt"); sanat.tulosta(cout); return 0; } #endif