Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: merkkijonossa kirjaimen korvaus

Sivun loppuun

cloudi [13.10.2003 21:57:19]

#

Miks merkkijono-jutut on aina niin hankalia?
pitis seuraavas saada jokaisen sanan 2.kirjain muutettua $-merkiksi. mulla vain eka sanassa muuttaa. eli mikäs täs auttas? (välilyönnin huomiointi?)
-mitä EROO on:
-jos käyttää char-merkkijonolle taulukkoa
-taikka sitten string-tyyppiä??? (string teksti)

char teksti[Koko];
while (teksti[i] != '\0')
	{
	if(teksti[i]) teksti[i,1]='$';
	i++;
	}

Pink Blue Finn [14.10.2003 10:15:19]

#

itte käytän merkkijonoihin taulukkoa ku se on yksinkertasempi (ehkä)

ton pitäs toimia jotenki

char teksti[koko];
int count = 0;

// eli muutetaan jokaisen sanan toinen merkki $ -merkiksi
for(int i=0; i<koko; i++)
  {
  count++;
  if(teksti[i] == 32) // ascii -välilyönti
    count = 0;
  if(count == 2)
    teksti[i] = '$';
  }

cloudi [14.10.2003 11:20:14]

#

thanks jees sehä vaan toimi!!! (vaik meinasin epäillä et ku ei lopetus ehtona...\0 ..vaan oisko tuo sama ku koko-ehto,eli niin kauan kun ei tyhjää eli esim. 80 riviä, oletus enter..) -kyl noit merkkijono-jutskia yritin öpiskellä eli luin stringistä ja replacesta ym.

thefox [15.10.2003 08:15:06]

#

lainaus:

-mitä EROO on:
-jos käyttää char-merkkijonolle taulukkoa
-taikka sitten string-tyyppiä??? (string teksti)

std::string on luonnollisesti turvallisempi, char-merkkijonot ovat kuitenkin vain tavallisia taulukoita, joten puhveli ylivirtaukset (buffer overflow) ovat yleisiä jos soodaaja ei osaa hommiaan.

cloudi [15.10.2003 12:16:34]

#

kyl täs soodat ja soosit menee ..iha iiks! niin tarkoitatko että siis taulukoissa käytetään null-merkkiin päättyviä talletuksia eli onks nyt sitte tuo '\0'? sitä ei tos for-silmus ole..ja en iha tajuu ku vertaa ylempään while-silmuun!
ja pitääks taulukois varata tila null-merkille?(vai onko tämä jo osoitin-asiaa.. huuh!)
-ja sit stringissäkö ei tarvitse huolehtia null-merkistä ollenkaa? sen tiiän(?) että stringis ei turhaa jää alkioita käyttämättä. =)

odys [15.10.2003 14:12:55]

#

Muistin voi varata dynaamisesti allocilla tai vastaavalla ja vapauttaa deletellä.

cloudi [15.10.2003 16:53:17]

#

näinkö?

size_t size = 100;
char* buffer = new char[size];
delete[] buffer;

odys [15.10.2003 18:40:00]

#

No perjaatteessa vaikka noin, mutta jos ihan dynaamiseksi halutaan niin tarkistetaan tallennettavan stringin pituus ennen taulukkoon tunkemista ja varataan täsmälleen sen verran tilaa kuin stringi vaatii.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta