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

400

    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. Mistä puhuitte viimeksi kun näitte

      Kerro yksi aiheista
      Ikävä
      107
      7793
    2. Siekkilässä ajettu ihmisten yli- mitä tapahtui? Länsi-Savo ei ole uutisoinut asiata

      Manneja, vaiko matuja?
      Mikkeli
      114
      6098
    3. Se on hyvästi

      Toivottavasti ei tavata.
      Ikävä
      83
      5207
    4. Olenko saanut sinut koukkuun?

      Hyvä. Rakastan sua.
      Ikävä
      141
      4563
    5. Alavuden sairaala

      Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan
      Ähtäri
      11
      3240
    6. Sisäsiittosuus

      Tämän kevään ylioppilaista 90% oli sama sukunimi?
      Suomussalmi
      62
      3034
    7. Miksi sä valitsit

      Juuri minut sieltä?
      Ikävä
      58
      2948
    8. Törkeää toimintaa

      Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818
      Ylivieska
      10
      2464
    9. Kerro nyt rehellisesti fiilikset?

      Rehellinem fiilis
      Suhteet
      61
      2447
    10. Hei........

      Pelkkä sun näkeminen saa mut hymyilemään pitkin iltaa. Oot niin 🤩😘 Edellinen poistettiin.
      Ikävä
      56
      2076
    Aihe