// sanat.cpp /* Ohjelmalla lasketaan kuinka monta kertaa mik„kin sana esiintyy. Vesa Lappalainen 5.6.2000 Esim: kissa istuu puussa kissa naukuu kissa istuu => kissa = 3 istuu = 2 puussa = 1 maukuu = 1 K„„nt„miseksi projektiin: sanat.cpp, mjonotpp.cpp, mjonot.c (vstring.cpp) */ #include #include #include "mjonotpp.h" class cSana { // tunnistaa onko kysytty sana // laskurin yll„pito string jono; int laskuri; public: cSana() { laskuri = 0; } void lisaa() { laskuri++; } void alusta(const string &sana) { jono = sana; laskuri = 1; } void tulosta(ostream &os) const { os << jono << " " << laskuri << "\n"; } int oletko(const string &sana) const { if ( jono == sana ) return 1; return 0; // return jono == sana; } }; #if 1 const MAX_SANOJA = 20; class cSanat { // pilkkkoa rivi sanoiksi cSana // etsi„ sana ja lis„t„ laskuria cSana data[MAX_SANOJA]; // Huono ratkaisu (STL) int lkm; int etsi(const string &sana) const; void lisaa(const string &sana); public: cSanat() { lkm = 0; } void kasittele_rivi(const string &arivi); void tulosta(ostream &os) const; }; int cSanat::etsi(const string &sana) const // Kysyt„„n jokaiselta sanalta ett„ onko etsitt„v„ // jos on, palautetaan l”ytyneen sanan indeksi // Jos ei l”ydy lainkaan palautetaan -1 { for (int i=0; i= MAX_SANOJA ) return; // jos ei ole tilaa :-( data[lkm].alusta(sana); lkm++; } void cSanat::kasittele_rivi(const string &arivi) // 1. ota sana rivist„ ja lopeta jos ei ole sanoja // 2. etsi sana // jos l”ytyy lis„t„„n laskuria // jos ei l”ydy niin lis„t„„n uusi sana // 3. jatka 1. { string sana; string rivi(arivi); while ( rivi != "" ) { sana = erota(rivi,' '); int i = etsi(sana); if ( i >= 0 ) data[i].lisaa(); else lisaa(sana); } } void cSanat::tulosta(ostream &os) const { for (int i=0; i