//-------------------------------------------------------------------- /* vkseko02.cpp - Vuoden 2002 välikokeen pöytätestiohjelma */ #include <iostream> #include <string> /* 06 */ using std::cout; /* 07 */ using std::string; /* 08 */ /* 09 */ class cSorsa { /* 10 */ int vari; /* 11 */ string nimi; /* 12 */ public: /* 13 */ cSorsa() : nimi("Repe") { vari = 0; } /* 14 */ cSorsa(string &inimi) { /* 15 */ inimi = "Aku"; vari = 2; /* 16 */ } /* 17 */ ~cSorsa() { /* 18 */ cout << "Sinne meni: "; tulosta(); /* 19 */ } /* 20 */ void hyppaa(cSorsa apu) { /* 21 */ apu.nimi = "Senkin Sorsa"; /* 22 */ vari++; /* 23 */ } /* 24 */ void tulosta() { /* 25 */ vari++; /* 26 */ cout << nimi << " " << vari << "\n"; /* 27 */ } /* 28 */ }; /* 29 */ /* 30 */ int main(void) /* 31 */ { /* 32 */ string nimi = "Väiski"; /* 33 */ cSorsa aku(nimi); /* 34 */ cout << nimi; /* 35 */ aku.tulosta(); /* 36 */ { /* 37 */ cSorsa repe; /* 38 */ repe.tulosta(); /* 39 */ aku.hyppaa(repe); /* 40 */ aku.tulosta(); /* 41 */ } /* 42 */ aku.tulosta(); /* 43 */ return 0; /* 44 */ }
6|28|6|Miten sanat|1|14.3.2002 12:26:06 9|31|13|Luokan tehtäviin|146,1456|14.3.2002 12:37:41 10|30|19|Top down. Mikä kirjoitet|3,4|14.3.2002 12:41:53
const MAX_TABS = 5;class cTabs { unsigned int tabs[MAX_TABS]; public: cTabs(int deftab=0) { ... alustaa taulukon täyteen deftab-arvoa } void lisaa(int i,const string &sana) { ... laittaa paikkaan i sanan pituuden mikäli sana pitempi kuin paikassa i oleva pituus } unsigned int tab(int i) const { ... palauttaa paikassa i olevan pituuden } };
int main(void) { cTabs tabs(8); // => taulukossa arvot 8, 8, 8, 8, 8 tabs.lisaa(2,"kissa istuu"); // => 8, 8,11, 8, 8 tabs.lisaa(1,"kana kotkottaa"); // => 8,14,11, 8, 8 tabs.lisaa(2,"kissa syö hiirtä"); // => 8,14,16, 8, 8 tabs.lisaa(1,"kissa"); // => 8,14,16, 8, 8 tabs.lisaa(9,"kukko kiekuu"); // => 8,14,16, 8, 8 tabs.lisaa(-9,"negatiivinen"); // => 8,14,16, 8, 8 return 0; }
cTabs tabs(8,5); // => taulukossa arvot 8, 8, 8, 8, 8
ID tot cor QName Answer Time 6 28 6 Miten sanat 1 14.3.2002 12:26:06 7 31 21 Tarvitaan luokat 23 14.3.2002 12:29:11 8 26 10 Luokan tehtäviin 35 14.3.2002 12:33:45 9 31 13 Luokan tehtäviin 146,1456 14.3.2002 12:37:41 10 30 19 Top down. Mikä kirjoitet 3,4 14.3.2002 12:41:53
// Seuraava on tosi, jos sanan yksikin merkki on muu kuin // luettelon merkki. Sallituissa palauttaa -1 jos kaikki // merkit ovat joukon merkkejä. Jos jokin sanan kirjain // ei ole joukossa, palautetaan väärän kirjaimen indeksi. if ( sallituissa(sana,"0123456789-.") >= 0 ) ...// Tulostus oikeaan tai vasempaan reunaan voidaan valita: if ( ??? ) os << right; else os << left;
class cVaihda { cTabs tabs; char erotin; string tiedosto; ... public: cVaihda(char ierotin,int minlev) : tabs(minlev), erotin(ierotin) { } };
** erota - laittaa merkkijonon kahtia valitun merkin ** kohdalta ** erota - laittaa merkkijonon kahtia ensimmäisen ** valitun merkin kohdaltaja koodista: #define vstring std::string
//------------------------------------------------------------------------------ inline vstring erota(vstring &jono, char merkki=' ',bool etsi_takaperin=false) // Erottaa jonosta valitun merkin kohdalta alkuosan ja loppuosan. // Alkuosa palautetaan funktion nimessä ja loppuosa jätetään // jonoon. Merkin etsimissuunta voidana valita (oletuksena alusta päin). // Jos merkkiä ei löydy, palautetaan koko jono ja tyhjennetään jono. // Käyttöesimerkki: olkoon aluksi string jono,s; // 1) jono = "123 456"; s = erota(jono); => jono == "456" s == "123" // 2) jono = "123"; s = erota(jono); => jono == "" s == "123" // 3) jono = "1 2 3"; // while ( jono != "" ) cout << erota(jono) << ","; => tulostaa 1,2,3, // { size_t p; if ( !etsi_takaperin ) p = jono.find(merkki); else p = jono.rfind(merkki); vstring alku = jono.substr(0,p); if ( p == vstring::npos ) jono = ""; else jono.erase(0,p+1); return alku; }
//------------------------------------------------------------------------------ vstring erota(vstring &jono, const vstring &merkit,bool etsi_takaperin=false) // Erottaa jonosta valittujen merkkien kohdalta alkuosan ja loppuosan. // Alkuosa palautetaan funktion nimessä ja loppuosa jätetään // jonoon. Merkin etsimissuunta voidana valita (oletuksena alusta päin). // Jos merkkiä ei löydy, palautetaan koko jono ja tyhjennetään jono. // Käyttöesimerkki: olkoon aluksi string jono,s; // 1) jono = "123 456"; s = erota(jono," "); => jono == "456" s == "123" // 2) jono = "123"; s = erota(jono,";"); => jono == "" s == "123" // 3) jono = "1;2 3"; s = erota(jono," ;"); => jono == "2 3" s == "1" // { size_t p; if ( !etsi_takaperin ) p = jono.find_first_of(merkit); else p = jono.find_last_of(merkit); vstring alku = jono.substr(0,p); if ( p == vstring::npos ) jono = ""; else jono.erase(0,p+1); return alku; }