Merkkijonon poistaminen c++

Tässä olen kuumeisesti yrittänyt tehdä c :lla harjoitustyötä. Tehtävänä olisi poistaa tietty merkkijono ja pitäisi käyttää string.h luokkaa. Onnistuin tekemään ohjelman pätkän käyttäen string luokkaa, mutta nyt sitten en tiedä mitä pitäisi tehdä että saisi sen toimimaan myös käyttäen string.h luokkaa. Kertokaa joku viisaampi mitä pitäisi tehdä. Tässä esimerkki toimivasta ohjelmasta käyttäen stringiä.


#include
#include
using namespace std;

string poista(const string &alkup, const string &p)

   {
   string jono (alkup);
   int pit = p.length();
   int paikka;

   while ((paikka = jono.find(p)) !=string::npos)
   jono.replace(paikka, pit, "");

   return jono;
   }
   int main()
   {
   cout
6501
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

string.h on kyllä C-kielen puolella, joten ei oikein voi puhua luokasta.

jotenkin näin se menisi alkuperäinen nerkkijono sotketaan eikä muistia varata dynaamisesti

#include
#include

char *poista (char *alkup, char *p)
{
char *p1 = alkup;
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);


return pala;
}

int main (void)
{
puts( poista("testi ", "st"));
puts(poista("kokeilu", "ilu"));
puts(poista("rivi", "r"));
return 0;
}

Äänestä
  • ...kommenteista. Mitenkäs jo tuo poisto pitäisi tehdä omana aliohjelmanaan jota pääohjelma sitten vain kutsuisi?

    Äänestä

  • apuva kirjoitti:

    ...kommenteista. Mitenkäs jo tuo poisto pitäisi tehdä omana aliohjelmanaan jota pääohjelma sitten vain kutsuisi?

    tarkoitatko että sinulla on kaksi exe:ä ?

    Äänestä

  • z kirjoitti:

    tarkoitatko että sinulla on kaksi exe:ä ?

    ...kuin ohjelmoimaan. Eli tarkoitan sitä että ohjelma rakentuisi niin että olisi main jossa mahdollisesti kysyttäisiin käyttäjältä ne merkkijonot. Sitten olisi erikseen esim. poista niminen funktio jota main sitten vain kutsuisi.

    Äänestä

  • Apuva kirjoitti:

    ...kuin ohjelmoimaan. Eli tarkoitan sitä että ohjelma rakentuisi niin että olisi main jossa mahdollisesti kysyttäisiin käyttäjältä ne merkkijonot. Sitten olisi erikseen esim. poista niminen funktio jota main sitten vain kutsuisi.

    #include

    char buffer[256];

    gets(buffer);

    poista(buffer,p);

    getsin ongelma on se että jos kirjoitat enemmän merkkejä kuin puskuriin mahtuu niin ... crash

    Toinen parempi mahdollisuus on käyttää fgets() funktiota ja lukea stdin tiedostosta(näppäimistöltä) (vrt. C cin olio)

    include stdio.h ja stdlib.h

    char buffer[256];
    fgets(buffer,sizeof(buffer), stdin);

    toivottavasti noista on apua.

    Äänestä

  • Apuva kirjoitti:

    ...kuin ohjelmoimaan. Eli tarkoitan sitä että ohjelma rakentuisi niin että olisi main jossa mahdollisesti kysyttäisiin käyttäjältä ne merkkijonot. Sitten olisi erikseen esim. poista niminen funktio jota main sitten vain kutsuisi.

    C ? nimisessä otsikossa on poista niminen funktio jota main kutsuu, lisäät mainiin vaan ne arvojen kyselyt.

    int main (void)
    {
    char eka[50];
    char toka[50];

    printf("Anna alkuperäinen merkkijono: ";
    eka

    Äänestä

Kommentoi aloitusta


apuva kirjoitti:

Tässä olen kuumeisesti yrittänyt tehdä c :lla harjoitustyötä. Tehtävänä olisi poistaa tietty merkkijono ja pitäisi käyttää string.h luokkaa. Onnistuin tekemään ohjelman pätkän käyttäen string luokkaa, mutta nyt sitten en tiedä mitä pitäisi tehdä että saisi sen toimimaan myös käyttäen string.h luokkaa. Kertokaa joku viisaampi mitä pitäisi tehdä. Tässä esimerkki toimivasta ohjelmasta käyttäen stringiä.


#include
#include
using namespace std;

string poista(const string &alkup, const string &p)

   {
   string jono (alkup);
   int pit = p.length();
   int paikka;

   while ((paikka = jono.find(p)) !=string::npos)
   jono.replace(paikka, pit, "");

   return jono;
   }
   int main()
   {
   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