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.
Apua osoittimiin
2
403
Vastaukset
- 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
Mitä yhteistä on sulla ja kaivatulla?
Onko teillä samantyyppinen olemus tai luonne? Vai muistuttaako vartalonne toisiaan? Tai kasvot? Entä pukeutuminen? Onko991516- 2231146
Kerran oltiin mekin kahdestaan
Saanko sanoa, että minua kyllä vähän huvitti jälkeenpäin? Olit kuin vapiseva jänis ketun vieressä valmis loikkimaan paik131146Persut yritti estää somalinaista väittelemästä lääketieteen tohtoriksi
Yrittivät saada hänet lähihoitajakouluun, vaikka pärjäsi hyvin koulussa. Nyt hän on yliopistossa väitellyt lääketieteen247958Oikeasti, voitais mennä kahville
ja jutella niin kuin normi-ihmiset. Kyllä toivon sitä. En pelkää kohdata enkä istua sun kanssa samassa pöydässä. Miten o81949- 141930
Jos nainen harrastaa seksiä
Useiden kanssa, miten se eroaa miesten mielestä siitä, jos miehellä on ollut useita s kumppaneita? Oletan että kaikki mi179913Pihlaja-puulle
Illat on mulle pahimpia. En tiiä miks se olis vaan parasta yöstä toiseen nukkua sun kanssa ja herätä sun kasvoihin. Jos15839- 71757
Yritin keväällä unohtaa sinut nainen
mutta siinä kävi niin, että ikävä tuli korkoineen takaisin. Niin että mikä taikavoima sinulla on minuun, sitä joutuu mie31723