Ezt hogyan kell megcsinálni?
Írnom kell két függvényt. Az egyiknek az a feladata, hogy megállapítsa egy karakterről, hogy magánhangzó-e. A másiknak azt kéne csinálnia, hogy kap egy sztringet és abban megszámolja, hogy hány magánhangzó van. De fogalmam sincsen, hogy hogyan csináljam. Itt van a másik, már elkészült függvény:
int is_vowel(char c) {
char vowels[] = "aeiou";
c = lower(c);
for (int i = 0; i < 5; ++i)
if (vowels[i] == c)
return 1;
return 0;
}
a másik függvényed egy karakter tömböt(stringet) fog várni. A visszatérési értéke pedig egy int lesz(a magánhangzók száma):
int count_vowels(char * str)
A függvény törzsében biztosan fog kelleni egy változó, amiben összeszámolod, hogy hány magánhangzó van, ezt érdemes kezdetben nullára állítani:
int count = 0;
Ezek után végig kell menni a string összes betüjén. Mivel a string csak egy karakter tömb(ugyanolyan, mint a fenti is_vowel-ben a vowels), ezért simán csak indexeled és megkapod a megfelelö betüt. A ciklus nullától indul, mivel a string elsö karaktere a 0. indexen van, egyesével lépked, mivel minden betüt meg akarsz vizsgálni:
for(int i = 0; ???; i++)
A feltétel egy kicsit trükkös: az elején még nem feltétlenül tudod a string hosszát. Azt kell tudni a c-ben a stringekröl, hogy a memóriában úgy tárolódnak, hogy a legutolsó byte értéke 0. Ez azt jelenti, hogy ha pl csinálsz egy ilyen változót:
char * str = "abc", akkor abból nem egy 3 elemü tömb lesz, hanem 4 elemü:
[97, 98, 99, 0]
A 97, 98, 99 az a, b és c betük ascii kódjai, a végén lévö 0-t a fordító magától teszi oda azért, hogy tudjad a programodból detektálni, hogy hol a string vége.
Tehát a ciklusod valahogy így fog kinézni:
for(int i = 0; str[i] != 0; i++)
Ennek a ciklusnak a belsejében meg kell hívnod a már megírt függvényedet. A paramétere a stringed 'aktuális' karaktere (tehát str[i]). A visszatérési érték alapján(tehát, hogy magánhangzó-e vagy sem) növelni kell a count változó értékét egyel.
Egyébként az is_vowel implementációs sajátossága miatt(0-t ad vissza, ha nem magánhangzó, 1-et ha igen) megspórolhatod az elágazást, és a counthoz direktbe hozzáadhatod a visszatérési értéket:
count += is_vowel(str[i]);
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!