// Merkkijonofunktioiden toteutukset #include "poikkeukset.hh" #include "merkkijonokasittely.hh" #include #include // Lukee kaikki välilyönnillä erotellut osat virrasta vektoriin void lueOsat(std::istream &virta, std::vector &tulos) { std::string osa(""); while (virta >> osa) { tulos.push_back(osa); } } // Muuntaa merkkijonon positiiviseksi kokonaisluvuksi. // Tuottaa poikkeuksen Lukuvirhe jos merkkijonossa on virheitä. int kokonaisluvuksi(std::string merkkijono) { std::istringstream muunnosvirta(merkkijono); int tulos = 0; if (!(muunnosvirta >> tulos) || tulos <= 0 || !muunnosvirta.eof()) { // Muunnos epäonnistui, tulos ei ole positiivinen tai lopussa oli // muita merkkejä throw Lukuvirhe(merkkijono); } return tulos; } // Vertaa merkkijonoja kirjainkokoriippumattomasti. bool vertaaKKR(const std::string &eka, const std::string &toka) { if (eka.size() != toka.size()) { // Koot eroavat -> eivät voi olla samat. return false; } // Käydään jonot merkki kerrallaan läpi. for (unsigned int i = 0; i < eka.size(); i++) { if (std::tolower(eka.at(i)) != std::tolower(toka.at(i))) { return false; } } // Eroja ei löytynyt. return true; } bool vertaaLyhennos(const std::string &annettu, const std::string &kokonainen) { return vertaaKKR(annettu, kokonainen.substr(0, annettu.size())); }