Apua osoittimiin

Kauko81

Tehtävä: Tee osoittimia käyttävä toteutus funktiolle int mjpit(char *mj); joka palauttaa mj:n pituuden.

Olen tehnyt seuraavan ohjelman:

#include

int mjpit(char *mj)
{
    int koko=0;
    for(koko=0; mj[koko]!='\0'; koko ); // etsii loppumismerkin
    return koko;
}

int main(void)
{
    char MerkkiJono[]="tässäonkolmekymmentäkaksimerkkiä";
    int koko;

    koko = mjpit(MerkkiJono);

    printf("Merkkijonon pituus on %d merkkiä\n",koko);
    return 0;
}

Tämä ohjelma palauttaa kyllä merkkijonon pituuden, mutta miten tätä täytyisi muuttaa jos sen haluaisi tehdä osoittimilla?!

Muutkin tehtävät ovat helppoja tehdä mutta en tajua alkuunkaan miten ne tehdään osoittimien avulla?!

2) char *skandi(char *mj); joka muuttaa mj:n skandinaaviset merkit vastaaviksi merkeiksi o,a,O,A. Funktio arvonaan muutetun merkkijonon.

3) char *ptakap(char *mj); joka kääntää mj:n sisällön takaperin kirjoitetuksi. Funktio arvonaan muutetun merkkijonon.

2

358

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • hemmoit

      c- kielestä on aikaa mutta eiköhän näillä pääse alkuun.


      1.

      itseasiassa ratkaisusi on ok...

      mj[koko]!='\0'

      voidaan esitää vaikka näin (pointer arithmetic)

      *(mj koko) != '\0'


      tässä toinen

      for(koko=0; *mj!='\0'; koko , mj );


      2. Jos input stringiä saa muokata niin

      for(koko=0; *mj!='\0'; koko , mj )
      {
      switch(*mj) {
      case 'ä': *mj = 'a'; /* käytä heksa koodia ?*/
      ....
      }
      }


      3.

      http://discuss.fogcreek.com/techinterview/default.asp?cmd=show&ixPost=2077

    • Torak

      Otetaan vaikka toi 1 tehtävä.

      int mjpit(char *mj)
      {
      char *p;
      for(p=mj; *p; p );
      return (p-mj);
      }

      1 rivi esitellään osoitin p.
      2 vähän epäselvä for silmukka mutta:
      p arvoksi asetetaan mj eli alkaa alusta.
      Testataan onko p tosi. Eli != 0.
      Siirretään p osoitinta yhtä muisti paikkaa eteenpäin, eli . Silmukan lopussa on ; kuvaamassa tyhjää lausetta, sen takia että enempää ei tarvitse silmukassa tehdä.

      Eli nyt on osoitin p joka osoittaa merkkijonon loppuun ja mj joka osoittaa jonon alkuun. Tehdään vähennyslasku ja saadaan merkkijonon pituus. Ei eroa ei ole kovin paljoa.

      2 tehtävään: if(*p == 'ä') *p = 'a';

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

    Luetuimmat keskustelut

    1. Metsäkoneen kuljettaja huuteli tutkijalle

      "voisit kyllä ottaa rintaliivit pois ennen kuin tulet minulle juttelemaan, hän sanoo." https://yle.fi/a/74-20106446 On
      Suomussalmi
      704
      10320
    2. Suomi on täysin sekaisin

      Jo ties monettako päivää hirveä itku ja poru jostain helvetin nilviäisistä. https://www.is.fi/taloussanomat/art-2000010
      Maailman menoa
      422
      4594
    3. Kaikki ei vieläkään usko luontokatoon.

      Suomussalmen Hukkajoella foliohattu metsäkoneen kuljettaja tuhosi tuhansia harvinaisia jokihelmisimpukoita eli raakkuja
      Kajaani
      92
      3114
    4. Sano vain suoraan, että nyt riittää

      ettei kiinnosta. Sano, että lopeta! En ihmettelisi, jos olet saanut tarpeeksesi ja toivot minun ymmärtävän lopettaa. Eh
      Ikävä
      43
      2875
    5. Ohhoh! Ex-pääministeri Sanna Marinin Joni-rakas paljasti ilouutisen: "Tässä kuussa..."

      Sanna Marin on ollut naimisissa Markus Räikkösen kanssa. Nyt hänen seurassaan on usein julkkishiusmuotoilija Joni Willb
      Kotimaiset julkkisjuorut
      55
      2714
    6. Mari Rantanen asettaa sairaan lapsen edun oman uransa edelle - (tekikö Marin samaa)

      Noin toimii kunnon vastuuntuntoinen äiti, mutta siitäkin nämä mt-ongelmaiset vasemmistolaiset häntä täällä haukkuvat. "
      Maailman menoa
      230
      2698
    7. Mitä ajattelet aina

      Kun hän tulee näköpiiriin?
      Ikävä
      154
      1899
    8. Luokatonta toimintaa

      Tyrmistyttävää toimintaa Stora Enson korjuu yrittäjältä Hukkajoella. Täyttä piittaamattomuutta laeista ja luontoarvoista
      Suomussalmi
      73
      1748
    9. Ensimmäisestä kohtaamisesta saakka

      minulla on ollut hämmentynyt olo. Miten voit tuntua siltä, että olisin tuntenut sinut aina? Sinun kanssasi on yhtä aikaa
      Ikävä
      14
      1650
    10. Maailmankuulu homopingviini on kuollut

      Minä niin toivoin että pariskunta olisi saatu kunniavieraiksi ensi kesän Prideen. 💔 "Maailmankuulu homopingviini on k
      Lapua
      6
      1443
    Aihe