(H) Merkkijonon jakaminen osiin¶
Tavoite:
Harjoittelen string
- ja vector
-tyyppien käyttämistä.
Ohjeita:
Hae ohjelmakoodipohja: templates/04/split/
-> student/04/split/
.
Toteuta funktio split
, joka jakaa parametrina
annetun merkkijonon erotinmerkkien kohdalta osiin ja palauttaa osat
vector
-muuttujaan tallennettuna. Funktion parametrit ovat:
- merkkijono, joka jaetaan
- erotinmerkki
- totuusarvo, joka kertoo, halutaanko tyhjät osat (tyhjät merkkijonot)
ohittaa, oletusarvo on
false
. (Jos tyhjät osat halutaan ohittaa, funktiolle välitetään arvotrue
.)
Tyhjä osa syntyy, mikäli merkkijonossa on kaksi erotinmerkkiä
peräkkäin, tai mikäli merkkijono alkaa tai päättyy erotinmerkillä.
Esimerkiksi jos erotinmerkki on :
ja jaettava
merkkijono on A:B::C:
niin erotellut osat ovat “A”, “B”, “”, “C” ja “”.
Mikäli erotimerkkejä on useampi peräkkäin, niin jokaisesta
välistä, jossa ei ole merkkejä syntyy uusi tyhjä osa.
Mikäli tyhjiä osia ei haluta mukaan niin, käyttäjälle ei palauteta osia,
joissa ei ole yhtään merkkiä.
Lisää ohjelmakoodipohjaan vain funktion toteutus.
Älä muokkaa main
-funktiota mitenkään.
Kun funktio on toteutettu, pääohjelman pitää toimia seuraavasti:
Enter a string: a::bc:def::hijlkm
Enter the separator character: :
Splitted string including empty parts:
a
bc
def
hijlkm
Splitted string ignoring empty parts:
a
bc
def
hijlkm
Hiukan hankalammin tulkittava esimerkki, joka sisältää välilyöntejä eroteltavan merkkijonon alussa ja lopussa, ja lisäksi erotinmerkkinä:
Enter a string: A B C D E
Enter the separator character:
Splitted string including empty parts:
A
B
C
D
E
Splitted string ignoring empty parts:
A
B
C
D
E
Vinkkejä tehtävän tekemiseen:
- Oletusarvoisista parametreista (sekä kuormittamisesta) kerrottiin luvussa 2.5 Funktiot (Parametrien määrä ja tyypit).
- Kannattaa kerrata materiaalista 2.6 Merkkijonot ja merkit ja
erityisesti kohta “Hyödyllisiä C++-merkkijono-operaatioita”.
Tehtävässä voi hyödyntää useita
string
-tyypin valmiiksi toteutettuja metodeja. - Ongelma kannattaa jakaa mielessään osiin, jotka toteuttaa yksi kerrallaan. Tässä tehtävässä osia voisivat olla muun muassa erotinmerkin löytäminen ja osan erottaminen.
- Jos päädyt sellaiseen ratkaisuun, jossa käyt merkkijonon
indeksejä läpi toistorakenteessa, käytä indeksimuuttujan
tietotyyppinä
string::size_type
, äläint
. - Olemme useammassakin yhteydessä välittäneet
vector
-muuttujan funktiolle viiteparametrina arvoparametrin sijaan, jotta ohjelmakoodi olisi tehokkaampaa. Tässä tehtävässä voi tulla mieleen välittää paluuarvona viitevector
-muuttujaan. ÄLÄ TEE NÄIN! Muistele, mitä funktiossa määritellyille paikallisille muuttujille tapahtuu, kun funktion suoritus päättyy.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.