Sanan vaihtaminen toiseksi stringissä

hemm0

Jos on stringinä joku lause, niin kuinka siitä saa jonkun tietyn pituisen sanan vaihdettua toiseen, siis onko olemassa jonkin sortin replace() funktio, jolla pystyy korvaamaan vaikka "ja" sanan "tai" sanaksi ja olisiko kätevintä jakaa käyttäjän antama lause useaksi stringiksi? Jos joku tietää asiasta, niin olisin kiitollinen pikku vinkeistä.

15

1319

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • on järkevää

      sitten sanojen korvaaminen on helppoa.

      Tee vaikka funktio joka jakaa stringissä olevan lauseen stringitaulukkoon siten, että jokainen sana tulee taulukkoon omalle indeksilleen.

      Ja vaikka toinen funktio jolla yhdistät stringitaulukon yhdeksi stringiksi (eli käänteinen operaatio).

      Noita käyttämällä voit vaivattomasti vaihtaa sanoja stringistä.

      • hemm

        Jeps, yritänpä tuollaista. Kiitoksia


      • hemm0

        Miten muuten tehdään string taulukko, sillä eikö string c-kielessä ole char taulukko, eli kuinka saat sillon jollekin tietylle indeksille arvoksi jonkun sanan?


      • kodaaja
        hemm0 kirjoitti:

        Miten muuten tehdään string taulukko, sillä eikö string c-kielessä ole char taulukko, eli kuinka saat sillon jollekin tietylle indeksille arvoksi jonkun sanan?

        /* taulukon määrittely */
        #define KOKO 100
        char* taulukko[KOKO];

        /* esimerkkisana ja -indeksi */
        int indeksi = 5;
        char* sana = "esimerkki";

        /*
        sanan lisääminen taulukkoon indeksille,
        huomaa tilanvaraus (malloc).
        */
        taulukko[indeksi] = malloc(strlen(sana) 1);
        strcpy(taulukko[indeksi], sana);

        /* C :n kanssa tehtäisiin hieman toisin... */


      • hemm
        kodaaja kirjoitti:

        /* taulukon määrittely */
        #define KOKO 100
        char* taulukko[KOKO];

        /* esimerkkisana ja -indeksi */
        int indeksi = 5;
        char* sana = "esimerkki";

        /*
        sanan lisääminen taulukkoon indeksille,
        huomaa tilanvaraus (malloc).
        */
        taulukko[indeksi] = malloc(strlen(sana) 1);
        strcpy(taulukko[indeksi], sana);

        /* C :n kanssa tehtäisiin hieman toisin... */

        No katoppas, kiitoksia koodaajalle avusta, c:llä oon tosiaan ohjelmaa tekemässä.


      • hemm0
        kodaaja kirjoitti:

        /* taulukon määrittely */
        #define KOKO 100
        char* taulukko[KOKO];

        /* esimerkkisana ja -indeksi */
        int indeksi = 5;
        char* sana = "esimerkki";

        /*
        sanan lisääminen taulukkoon indeksille,
        huomaa tilanvaraus (malloc).
        */
        taulukko[indeksi] = malloc(strlen(sana) 1);
        strcpy(taulukko[indeksi], sana);

        /* C :n kanssa tehtäisiin hieman toisin... */

        invalid conversion from `void*' to `char*'

        Yritin kääntää tuota antamaasi koodipätkää, mutta tällanen herja tuli. Ehkäpä koodaaja osaat sanoo miks ei pelaa, jos viitsit. kiitos


      • hemm
        hemm0 kirjoitti:

        invalid conversion from `void*' to `char*'

        Yritin kääntää tuota antamaasi koodipätkää, mutta tällanen herja tuli. Ehkäpä koodaaja osaat sanoo miks ei pelaa, jos viitsit. kiitos

        otinkin vähä c :aa avuksi, joten tuo ei nyt sitte oo niin välttämätön, mutta kiitos kumminkin.


      • hemm0 kirjoitti:

        invalid conversion from `void*' to `char*'

        Yritin kääntää tuota antamaasi koodipätkää, mutta tällanen herja tuli. Ehkäpä koodaaja osaat sanoo miks ei pelaa, jos viitsit. kiitos

        Olisit nyt edes laittanut sen rivin, mistä valitus tulee. Ilmeisesti kohta on kuitenkin tuo malloc. Siinä tapauksessa mallocin palauttama osoitin pitää castata, esim. jokuosoitin = (char *) malloc(..)


      • hemmo
        Mik26 kirjoitti:

        Olisit nyt edes laittanut sen rivin, mistä valitus tulee. Ilmeisesti kohta on kuitenkin tuo malloc. Siinä tapauksessa mallocin palauttama osoitin pitää castata, esim. jokuosoitin = (char *) malloc(..)

        Jep sain homman tehtyä näin, mutta vielä pitäs kysyä yhtä asiaa, eli onko mitenkään mahdollista saada käyttäjältä syöttötietona lausetta, siis silleen, että on välilyöntejä mukana stringissä, ainakaan cin ja printf eivät toimi silleen.

        #include
        #include
        #include
        #include

        using std::string;
        using std::cout;

        int main(){

        char jono[]="onpa tassa rivi on rivi riva";
        char jono2[]=" ";
        int i,e=0,s=0,k=0;
        int t[50];

        //c koodia
        string s1;
        s1 = jono;
        string str15 = "vaihto";

        //c:tä
        for(i=0;i=0;i--){//oma luuppi viimeselle sanalle
        k ;
        if(jono[ i ] == jono2[ 0 ]){
        if(k==6)
        e=i 2;
        break;
        }
        }

        //replacet c :ssaa
        for(i=0;i


      • hemmo
        hemmo kirjoitti:

        Jep sain homman tehtyä näin, mutta vielä pitäs kysyä yhtä asiaa, eli onko mitenkään mahdollista saada käyttäjältä syöttötietona lausetta, siis silleen, että on välilyöntejä mukana stringissä, ainakaan cin ja printf eivät toimi silleen.

        #include
        #include
        #include
        #include

        using std::string;
        using std::cout;

        int main(){

        char jono[]="onpa tassa rivi on rivi riva";
        char jono2[]=" ";
        int i,e=0,s=0,k=0;
        int t[50];

        //c koodia
        string s1;
        s1 = jono;
        string str15 = "vaihto";

        //c:tä
        for(i=0;i=0;i--){//oma luuppi viimeselle sanalle
        k ;
        if(jono[ i ] == jono2[ 0 ]){
        if(k==6)
        e=i 2;
        break;
        }
        }

        //replacet c :ssaa
        for(i=0;i

        Joo ei siinä mitään, löysin vastauksen, eli gets() toimii niin kun pitää. Kiitoksia kaikille auttajille anyway.


      • kodaaja
        hemmo kirjoitti:

        Jep sain homman tehtyä näin, mutta vielä pitäs kysyä yhtä asiaa, eli onko mitenkään mahdollista saada käyttäjältä syöttötietona lausetta, siis silleen, että on välilyöntejä mukana stringissä, ainakaan cin ja printf eivät toimi silleen.

        #include
        #include
        #include
        #include

        using std::string;
        using std::cout;

        int main(){

        char jono[]="onpa tassa rivi on rivi riva";
        char jono2[]=" ";
        int i,e=0,s=0,k=0;
        int t[50];

        //c koodia
        string s1;
        s1 = jono;
        string str15 = "vaihto";

        //c:tä
        for(i=0;i=0;i--){//oma luuppi viimeselle sanalle
        k ;
        if(jono[ i ] == jono2[ 0 ]){
        if(k==6)
        e=i 2;
        break;
        }
        }

        //replacet c :ssaa
        for(i=0;i

        sitä voisit kokeilla.


      • Ananas
        hemmo kirjoitti:

        Joo ei siinä mitään, löysin vastauksen, eli gets() toimii niin kun pitää. Kiitoksia kaikille auttajille anyway.

        gets()-funktio on yleinen syy tietoturva-aukkoihin, koska se ei rajoita luettavan puskurin pituutta, toisin kuin fgets()

        tiedän, että vaikutan nipottajalta, mutta kannattaa opetella hyville tavoille alusta asti.


      • hemm0

        Tiedätkö muuten onko tuota STL kirjastoa vakiona kaikissa kääntäjissä.. ja miten se sisällytetään, en ainakaan saanut noita esimerkkejä toimimaan.


      • hemm
        hemm0 kirjoitti:

        Tiedätkö muuten onko tuota STL kirjastoa vakiona kaikissa kääntäjissä.. ja miten se sisällytetään, en ainakaan saanut noita esimerkkejä toimimaan.

        Sain toimiin. kiitos


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Poliisi: Kymmenhenkinen pohjalaisperhe ollut vuoden kateissa kansainvälinen etsintäkuulutus Poliis

      Poliisi: Kymmenhenkinen pohjalaisperhe ollut vuoden kateissa – kansainvälinen etsintäkuulutus Poliisi pyytää yleisön apu
      Maailman menoa
      423
      3631
    2. Tässä totuus jälleensyntymisestä - voit yllättyä

      Jumalasta syntyminen Raamatussa ei tässä Joh. 3:3. ole alkukielen mukaan ollenkaan sanaa uudestisyntyminen, vaan pelkä
      Jälleensyntyminen
      318
      1612
    3. Mitään järkeä?

      Että ollaan erillään? Kummankin pää on kovilla.
      Ikävä
      114
      1432
    4. En kadu sitä, että kohtasin hänet

      mutta kadun sitä, että aloin kirjoittamaan tänne palstalle. Jollain tasolla se saa vain asiat enemmän solmuun ja tekee n
      Ikävä
      85
      1399
    5. Noniin rakas

      Annetaanko pikkuhiljaa jo olla, niin ehkä säilyy vienot hymyt kohdatessa. En edelleenkään halua sulle tai kenellekään mi
      Ikävä
      99
      1368
    6. Oisko mitenkään mahdollisesti ihan pikkuisen ikävä..

      ...edes ihan pikkuisen pikkuisen ikävä sulla mua??.. Että miettisit vaikka vähän missähän se nyt on ja oiskohan hauska n
      Ikävä
      59
      1316
    7. Lapuan sanomissa käy rytinä

      Pistivät sitten päätoimittajan pihalle
      Lapua
      50
      1246
    8. Helena Koivu : Ja kohta mennään taas

      Kohta kohtalon päivä lähestyy kuinka käy Helena Koivulle ? Kenen puolella olet? Jos vastauksesi on Helenan niin voisi
      Kotimaiset julkkisjuorut
      89
      1159
    9. Au pair -työ Thaimaassa herättää kiivasta keskustelua somessa: "4cm torakoita, huumeita, tauteja..."

      Au pairit -sarjan uusi kausi herättää keskustelua Suomi24 Keskustelupalvelussa. Mielipiteitä ladataan puolesta ja vastaa
      Tv-sarjat
      33
      1027
    10. Oot ihana

      Toivottavasti nähdään sattumalta jonain kesäpäivänä♥️🥺🫂
      Ikävä
      39
      960
    Aihe