Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Selittäisikö joku tämän koodin

mykle [27.03.2012 13:33:49]

#

Minulla on ohjelma joka kääntää vokaalit pieniksi kirjaimiksi. En ymmärrä mitä noissa funktioissa tapahtuu. Voisiko joku selittää mitä toLowercaseVowel ja isUppercaseVowel tässä tekee? Varsinkin tämä "if (isUppercaseVowel(c)) return(c+32);"

#include <stdio.h>

int isUppercaseVowel(char c);
char toLowercaseVowel(char c);

int main()
{
    printf( "This program turns all the vowels into lowercase letters. \n\n");
    printf( "Type a Sentence:\n");

    char c;
    while((c=getchar())!='\n')
         printf("%c",toLowercaseVowel(c));
    return 0;
}

int isUppercaseVowel(char c)
{
    if((c=='A')||(c=='E')||(c=='I')||(c=='O')||(c=='U')||(c=='Y')) return 1;
    else return 0;
}

char toLowercaseVowel(char c)
{
   if (isUppercaseVowel(c)) return(c+32);
   else return c;
}

Lebe80 [27.03.2012 13:45:26]

#

Näyttäisi nopealla lukaisulla ja c-kieltä taitamattoman silmään, että ascii-merkistössä liikutaan 32 merkkiä eteenpäin, jolloin arvatenkin osutaan isolla kirjoitetun merkin "pieneen" versioon.

Koodirimpsu siis menee kirjoitetun tekstin lävitse, ja etsii isolla kirjoitettuja merkkejä (vokaalit), jotka se muuntaa pieniksi.


edit:
nopeampi tapa tarkastella koodia, on muuntaa sitä, eli kokeilepa vaikkapa muuntaa c+32 muotoon c+33, ja katso mitä tapahtuu.

Anaatti [27.03.2012 16:34:46]

#

C:ssä myös charrit ovat periaatteessa vain numeroita kuten esimerkiksi intitkin.
Tuossa koodi joka demonstroi charrejen toimintaa:

char a = 'a';
int b = 97;
printf("%c", a); //tulostaa a
printf("%c", b); //tulostaa a
printf("%i", a); //tulostaa 97
printf("%i", b); //tulostaa 97

Tästä löytyy vielä ASCII-taulukko, jonka avulla voit "muuttaa" numerot kirjaimiksi ja toisinpäin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta