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

396

    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. Huomenta ihana

      Kauniskasvoinen ihanuus 😘 saan sut vielä
      Ikävä
      46
      7565
    2. Hei rakas...

      Miten on työpäivä sujunut? Rakastan sinua 💗
      Ikävä
      33
      4173
    3. Ei tämä etene ikinä

      Kun kumpikaan ei enää ota yhteyttä. Mä en ainakaan uskalla.
      Ikävä
      57
      3685
    4. Edelleen sitä on vaikea uskoa

      Että olisit oikeasti rakastunut muhun
      Ikävä
      50
      3170
    5. Vitsi mihin menit. Heti takasin.

      Mä näin sut tuu takasin! Oli kiire, niin en ehtiny sin perään!
      Ikävä
      17
      2856
    6. Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...

      Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons
      Suomalaiset julkkikset
      57
      2471
    7. Miksi et irrota otettasi

      Suhteeni?
      Ikävä
      54
      2388
    8. Toiveikas vai toivoton

      torstai? Ajatuksia?
      Ikävä
      40
      2329
    9. Koko ajan olet

      Senkin suhteen kiusannut. Halut on ihan mielettömät olleet jo pitkään
      Ikävä
      45
      2322
    10. Mukavaa päivää

      Mun rakkauden kohteelle ❤️ toivottavasti olet onnellinen
      Ikävä
      16
      2266
    Aihe