Miten C:ssä voi korvata tekstiä jossakin merkkijonossa, C :lle löysin tällaisen esimerkin, mut C:lle en löytänyt ohjeita.
#include
#include
using namespace std;
int main () {
string Teksti = "The Lord of the Rings";
Teksti.replace (Teksti.find ( "Lord"), 4, "lord" );
cout
Tekstin korvaaminen C:ssä
3
422
Vastaukset
- Keijo
Jotensakkin tälleen menee "vastaava" koodi.
Tarkistuksia ei tehdä. Funktio strstr() palauttaa NULL jos alimerkkijonoa ei löydy, jolloin ilman tarkistuksia menee asiat pieleen..
#include
#include
int main(int argc, char *argv[])
{
char *merkkijono = "The Lord of the Rings";
strncpy(strstr(merkkijono, "Lord"), "lord", 4);
printf("%s\n", merkkijono);
}
Hyvää lunttausapua merkkijonoihin liittyen:
http://www.cppreference.com/stdstring.htmlPääsääntöisesti strcpy/strncpy kopioi vielä NULL-merkin loppuun, joten merkkijono voi tavallaan lyhentyä, jos ollaan korvaamassa sanaa merkkijonon alusta. Tässä tapauksessa homma toiminee, koska strncpy:lle annetaan 4, joka on muutettavan sanan pituus ilman NULLia (strncpy ei kopioi NULLia, koska sitä ei tule vastaan viimeistään neljännen merkin kohdalla). Lisäksi strncpy-temppu toiminee helposti vain niille korvauksille, joissa muunnettavan sanan pituus on yhtä paljon kuin muutetun sanan pituus.
- ccode
Ei tällaista koodia saa kirjoittaa. Standardin mukaan
toiminta on määrittelemätön.
/* tätä merkkijonoa ei voi muokata */
char *merkkijono = "The Lord of the Rings";
/* tätä voi muokata */
char merkkijono[] = "The Lord of the Rings";
/* tätä voi muokata */
char *merkkijono = strdup("The Lord of the Ring");
/*
* tässä kirjoitetaan vakiomerkkijonon päälle
* jos tilanvaraus tehdään väärin.
*/
strncpy(strstr(merkkijono, "Lord"), "lord", 4);
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 73853
Miltä se tuntuu
Miltä se tuntuu havahtua, että on ollut ihmistä kohtaan, joka on rakastanut ja varjellut, täysi m*lkku? Vai havahtuuko s104708- 35577
- 40575
- 29572
- 46570
- 33559
- 50540
Mitä se olisi
Jos sinä mies saisit sanoa kaivatullesi mitä vain juuri nyt. Ilman mitään seuraamuksia yms. Niin mitä sanoisit?34537- 35464