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

445

    Vastaukset 2

    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. Suomalaisten pinna paloi - Ärsytys iskee uudesta TTK-juontajasta "Eihän tälle voi kun nauraa"

      Oliko Veronica Verho hyvä valinta TTK-juontajaksi? Uuden TTK-juontajan henkilöllisyyttä on arvailtu siitä asti, kun Va
      Suomalaiset julkkikset
      71
      1917
    2. Nainen, onko sinussa sitä aitoa feminiinisyyttä jäljellä

      Vai onko se jäänyt meikkien, korujen, hameiden ym. alle peittoon? Onko naisellisuutesi aitoa vai opetettua? Jos teet nai
      Ikävä
      366
      1209
    3. Kirjoita jotain

      Kivaa, hellää ja piristävää
      Ikävä
      141
      1008
    4. Missäs se Miss Suomussalmi luuraa?

      Jokin aika sitten eräs myyjätär tituleerasi itsensä Miss Suomussalmeksi. Asiakas oli kuulemma Tokmannin kassalla todennu
      Suomussalmi
      19
      957
    5. Mitäpä luulet että tykkääkö

      kukaan kaivatustasi ?
      Ikävä
      89
      685
    6. Päälle hautaus?

      Hautauksissa puhutaan päällehautauksista jos vaikka mies on kuollut ensin ja vaimo 20 vuotta myöhemmin! Todellisuudessa
      Lieksa
      105
      662
    7. Varmaan aika moni

      Haluaisi sinut enemmän kuin mielellään
      Ikävä
      41
      648
    8. Voisit nainen joskus vastata minulle

      Ja antaa jotain itsestäsi. Pientä tunnistetta ja juttua itsestäsi ja meistä. Kannustan.
      Ikävä
      63
      642
    9. On tuota ikäeroa meillä kyllä aivan liian paljon

      Etsi samanikäistä kuin olet, niin minäkin.
      Ikävä
      56
      614
    10. T rakastan sua

      vaikket sitä usko
      Ikävä
      58
      570
    Aihe