Kirjoittaja Aihe: [ ratkaistu ] Vakiokokoisten stringien vektori tai taulukko c++ -tyylisesti  (Luettu 2414 kertaa)

teele

  • Käyttäjä
  • Viestejä: 852
    • Profiili
Esimerkkitapauksena voisi olla vaikka tekstisivu, jossa on 40 riviä ja jokaisen rivin maksimi- tai vaikiopituus on 80 merkkiä.

Varmaan tavallisella c:llä pitäisi tehdä kaksiulotteinen taulukko

char sivu[rivimäärä][merkkimäärä]

mutta haluaisin sivun c++ -tyylisesti eli rivit vakiopituisina stringeinä ja rivit vektoriin tai arrayhin niin, että kääntäjä ymmärtää, että mitään lisätilaa sivulle ei koskaan tarvita ja jos riviä muutetaan, se pysyy aina omassa tilassaan eli uusi rivi mahtuu vanhan rivin tilaan.

Jos vakiotilavaatimusta ei olisi, sivu olisi varmaan

std::vector<std::string> -muotoinen.

Toiveena olisi siis saada kääntäjä tekemään sellaista koodia, joka ei vaatisi mitään ylimääräistä tilaa eriputuisille stringeille tai muille varauksille.






« Viimeksi muokattu: 27.06.24 - klo:17.57 kirjoittanut teele »

nm

  • Käyttäjä
  • Viestejä: 16435
    • Profiili
C++:n standardikirjastossa ei ole luokkaa vakiokokoiselle stringille. Voit käyttää C-tyyppistä char-taulukkoa ja muuntaa sen C++:n stringiksi käsittelyä varten ja takaisin char-taulukoksi tallennettaessa tietorakenteeseen. Samalla voit miettiä, miten tietorakenne käsittelee liian pitkät merkkijonot, eli leikataanko ne vakiotilaan vai nostetaanko tallennettaessa poikkeus.


Toiveena olisi siis saada kääntäjä tekemään sellaista koodia, joka ei vaatisi mitään ylimääräistä tilaa eriputuisille stringeille tai muille varauksille.

Eikö tämä toisaalta hukkaa tilaa, jos osa merkkijonoista on lyhyempiä kuin taulukon leveys?

teele

  • Käyttäjä
  • Viestejä: 852
    • Profiili
Lainaus
Eikö tämä toisaalta hukkaa tilaa, jos osa merkkijonoista on lyhyempiä kuin taulukon leveys?

Niinpä, ehkä std::vector<std::string> olisi sittenkin sopivin, ainakin helpoin.

Kiitos nopeasta vastauksesta  :)


Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11485
    • Profiili
    • Tomin kotisivut
Tulee mieleen, että tässä voisi ehkä käyttää std::arraytä. Lisäksi joissain tilanteissa std::string_view voisi olla hyödyllinen.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.