merkkijonoista vielä

Tuolla aikaisemmin oli jo kysytty merkkijonoista ja niiden poistamisesta. Minulla on samanlainen ongelma ja yritin tehdä kyseisten ohjeiden mukaan, mutta pieleen menee eli tulostettaessa teksti uudestaan katkeaa se siihen poistettavaan merkkijonoon eikä loppuosa tule mukaan. Miten ohjelmaa pitäisi korjata että se toimii oikein?


#include
#include

void ali (char *teksti, char *p)
{
char *p1 = teksti;
char *p2;
int l = strlen(p);
static char pala[256];

pala[0] = '';

while((p2 = strstr(p1,p))!= NULL)
{
*p2 = '';
strcat(pala,p1);
p1 = p2 l;
}

strcat(pala,p1);

}

main (void)

{
char pala, p1;
char teksti[128]="Tästä tekstistä ohjelma poistaa merkkijonon.

Tämän jälkeen teksti tulostetaan näytölle.";
printf("
%s",teksti);
printf("

Anna etsittava sana/kirjaimet
");

char p[50];
gets(p);

ali(teksti,p);
printf (pala,p1);

return 0;
}
2137
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

En edes jaksanut lukea koodia, mutta luulen että siihen sun tulostettavaan merkkijonoon tulee mukaan lopetusmerkki tms. Eli ohjelma luulee että merkkijono on jo lopussa vaikkei se ookkaan. Käytä sellaisia String funktioita jotka ei lisää lopetusmerkkiä jonojen perään.

Äänestä

eli funktio ali tulisi palauttaa:

char *ali (char *teksti, char *p)
{
....
return pala;
}

printf() käytetään väärin.

eli haluat tulostaa palan:

char *pala;
...
pala = ali(teksti,p);
...
puts(pala) tai printf("
%s",pala);

ja tuossa on sama vika kuin alkuperäisessäkin:

alkuperäinen puskuri tuohotaan ja muisti pitäisi varata dynaamisesti. eikä todellakaan mikään aloittelija ystävällinen esimerkki :(

Äänestä

Kommentoi aloitusta


Bizz kirjoitti:

Tuolla aikaisemmin oli jo kysytty merkkijonoista ja niiden poistamisesta. Minulla on samanlainen ongelma ja yritin tehdä kyseisten ohjeiden mukaan, mutta pieleen menee eli tulostettaessa teksti uudestaan katkeaa se siihen poistettavaan merkkijonoon eikä loppuosa tule mukaan. Miten ohjelmaa pitäisi korjata että se toimii oikein?


#include
#include

void ali (char *teksti, char *p)
{
char *p1 = teksti;
char *p2;
int l = strlen(p);
static char pala[256];

pala[0] = '';

while((p2 = strstr(p1,p))!= NULL)
{
*p2 = '';
strcat(pala,p1);
p1 = p2 l;
}

strcat(pala,p1);

}

main (void)

{
char pala, p1;
char teksti[128]="Tästä tekstistä ohjelma poistaa merkkijonon.

Tämän jälkeen teksti tulostetaan näytölle.";
printf("
%s",teksti);
printf("

Anna etsittava sana/kirjaimet
");

char p[50];
gets(p);

ali(teksti,p);
printf (pala,p1);

return 0;
}

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