Tekstin korvaaminen C:ssä

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
3458
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

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.html

Äänestä
  • Pää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.

    Äänestä

  • 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);

    Äänestä

Kommentoi aloitusta


mitenmiten kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu