/* mjonotpp.cpp */ /****************************************************************************/ /* M J O N O T P P. C P P ** ** ** Tiedostossa on merkkien ja merkkijonojen k„sittelyohjelmien yleiset ** aliohjelmien otsikot. Tiedosto on l„hinn„ muunnostiedosto string- ** tyypille vastaavasta C-kirjastosta mjonot.c ** ** Tekij„t: Vesa Lappalainen ** Tehty: 02.01.1996 ** ** Kommentit ks. mjonot.c ja mjonotpp.h ** *****************************************************************************/ #include #include #include #include "mjonot.h" #include "mjonotpp.h" //---------------------------------------------------------------------------- int tarkennin_alku(const vstring &tied) // Palauttaa tarkentimen alkupaikan tai -1 // Muistettava ett„ hakemistonkin nimessa voi olla . // Esim: oma.dat => 3 // 0123456 // c:\oma.1\oma => -1 { size_t i = tied.find_last_of(":.\\"); // Mik„ loytyy viimeisen„? if ( i == NPOS ) return -1; // Jollei mikaan niin ei ole if ( tied[i] == '.' ) return i; // Jos viimeinen oli . niin l”ytyi return -1; // Muuten ei loytynyt } //---------------------------------------------------------------------------- vstring &poista_tarkennin(vstring &tied) // Poistaa mahdollisen tarkentimen // Esim: oma.dat = oma { int i = tarkennin_alku(tied); if ( i < 0 ) return tied; return tied.remove(i); } //---------------------------------------------------------------------------- vstring &laita_tarkennin(vstring &tied,const vstring &tark) // Lis„„ tarkentimen, mik„li sit„ ei viel„ ole // Esim: oma.dat .bak => oma.dat // oma .bak => oma.bak { int i = tarkennin_alku(tied); if ( i >= 0 ) return tied; return tied += tark; } //---------------------------------------------------------------------------- vstring &vaihda_tarkennin(vstring &tied,const vstring &tark) // Vaihtaa tarkentimen // Esim: oma.dat .bak => oma.bak // oma .bak => oma.bak { return poista_tarkennin(tied) += tark; } //---------------------------------------------------------------------------- istream &lue_rivi(istream &is,char *s,int max_koko) { #ifdef USE_CONSOLE if ( &is == &cin ) { lue_jono(s,max_koko); return is; } #endif is.getline(s,max_koko,'\n'); return is; } //---------------------------------------------------------------------------- istream &lue_rivi(istream &is,vstring &st) { char s[400]=""; kopioi_jono(N_S(s),st.c_str()); lue_rivi(is,s,sizeof(s)); st = s; return is; } //---------------------------------------------------------------------------- istream &lue_rivi(istream &is,int &i,int def) { char s[400]=""; sprintf(s,"%d",def); lue_rivi(is,s,sizeof(s)); i = def; sscanf(s,"%d",&i); return is; }