/* merkit.cpp */ /* Ohjelmalla lasketaan montako kertaa mik„kin merkki esiintyy tiedostossa */ /* Projektiin: merkit.cpp */ /* 08.3.1996 Vesa Lappalainen, korj. 18.3.2000 */ #include #include #include #include using namespace std; #define MERKKEJA 256 class cEsiintymat { int merkit[MERKKEJA]; int lkm; public: void nollaa(); cEsiintymat(int alkm=MERKKEJA) { lkm = alkm; if ( lkm < 0 ) lkm = 0; if ( lkm >= MERKKEJA ) lkm = MERKKEJA; nollaa(); } ostream &tulosta(ostream &os) const; const cEsiintymat &operator+=(const char *rivi); const cEsiintymat &operator+=(const string &st) { return operator+=(st.c_str()); } const cEsiintymat &operator+=(char ch) { // Lis„t„„n taulukkoon merkin esiintym„. Pienet kirjaimet samaistetaan // isoiksi kirjaimiksi. // !!!! Muista ett„ Ž ja „ voivat olla "negatiivisia" // jos char sattuu olemaan signed (esim. Borland-C:ss„ oletuksena)! int i = (unsigned char)toupper(ch); if ( i < lkm ) merkit[i]++; return *this; } }; ostream &operator<<(ostream &os,const cEsiintymat &e) { return e.tulosta(os);} /****************************************************************************/ void cEsiintymat::nollaa() // Nollataan taulukko { for (int i=0; i"; getline(cin,rivi); if ( rivi > " " ) nimi = rivi; // lue_jono_oletus("Anna laskettavan tiedoston nimi",0,0,"merkit.cpp",nimi); ifstream f(nimi.c_str()); if ( !f ) { cout << "Tiedosto " << nimi << " ei aukea!" << endl; return 1; } while ( getline(f,rivi) ) { esiintymat += rivi; // esiintymat.lisaa(rivi); esiintymat += '\n'; } f.close(); cout << esiintymat << endl; return 0; }