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

1325

    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. YLE Äänekosken kaupunginjohtaja saa ankaraa arvostelua

      Kaupungin johtaja saa ankaraa kritiikkiä äkkiväärästä henkilöstöjohtamisestaan. Uusin häirintäilmoitus päivätty 15 kesä
      Äänekoski
      99
      2045
    2. Euroopan lämpöennätys, 48,8, astetta, on mitattu Italian Sisiliassa

      Joko hitaampikin ymmärtää. Se on aivan liikaa. Ilmastonmuutos on totta Euroopassakin.
      Maailman menoa
      289
      1854
    3. Asiakas iski kaupassa varastelua tehneen kanveesiin.

      https://www.iltalehti.fi/kotimaa/a/33a85463-e4d5-45ed-8014-db51fe8079ec Oikein. Näin sitä pitää. Kyllä kaupoissa valtava
      Maailman menoa
      322
      1667
    4. Martina lähdössä Ibizalle

      Eikä Eskokaan tiennyt matkasta. Nyt ollaan jännän äärellä.
      Kotimaiset julkkisjuorut
      203
      1546
    5. Leipivaaran päällä on kuoleman hiljaista.

      Suru vai suuri helpotus...
      Puolanka
      30
      1153
    6. Jos ei tiedä mitä toisesta haluaa

      Älä missään nimessä anna mitään merkkejä kiinnostuksesta. Ole haluamatta mitään. Täytyy ajatella toistakin. Ei kukaan em
      Ikävä
      94
      1093
    7. Useita puukotettu Tampereella

      Mikäs homma tämä nyt taas on? "Useaa henkilöä on puukotettu Tampereen keskustassa kauppakeskus Ratinan lähistöllä." ht
      Tampere
      89
      1057
    8. Määpä tiijän että rakastat

      Minua nimittäin. Samoin hei! Olet mun vastakappaleeni.
      Ikävä
      51
      1037
    9. Se nainen näyttää hyvältä vaikka painaisi 150kg

      parempi vaan jos on vähän muhkeammassa kunnossa 🤤
      Ikävä
      63
      1032
    10. Avustikset peruttu.

      Aettokosken ampuraan rahat otettu poekkeen valtiolle.
      Suomussalmi
      58
      1018
    Aihe