aantal tellers in C

Ik probeer brieven in een bestand met deze tekst te tellen:

"abbcccddddeeeeeffffff ........ zzzzzzzzzzzzzzzzzzzzzzzzzz"

Ik wil een reeks tellers maken: om dit te doen:

count[0] = 1 /* # of a's */
count[1] = 2 /* # of b's */

/* ... */

count[25] = 26 /* # of z's */

dit is mijn eerste benadering

#include
#include

int main() {
    int count[26];
    int i;
    int c;
    for(i=0; i<26; i++){
       count[i] = 0;
    }

    while ((c = getchar()) != EOF) {
        if (isalpha(c)) {
         count[i] ++;
       }
    }
}

}

0
Waar is het bestand?
toegevoegd de auteur Fahad Uddin, de bron
U kunt de ASCII-waarde van '' 'c' '' naar een index converteren met behulp van: '' 'c-'a' '' 'of' '' c-'A '' '', afhankelijk van het geval (bovenste/lager) van de invoer.
toegevoegd de auteur Heath Hunnicutt, de bron
Welkom bij Stack Overflow! Het lijkt erop dat je je eerste aanpak hier met de hand hebt ingevoerd. Het maakt niet veel uit voor dit specifieke probleem, maar mensen (wel, me ) krijgen ornery en beginnen met stemmen als de code die hier wordt besproken niet de daadwerkelijke code is die je aan het testen bent. (Let op de countr [i] - die niet gecompileerd kan worden.) Kopieer en plak je code. Niet opnieuw typen vanuit het geheugen. Bedankt!
toegevoegd de auteur sarnold, de bron

2 antwoord

Wat u moet doen is het karakter in een index in de array veranderen. U kunt dit doen door 'a' van het teken af ​​te halen en dat is de index. Bijvoorbeeld:

'a' - 'a' == 0
'b' - 'a' == 1
...
'z' - 'a' == 25

And with that index, you know what element to increment. It might be good to do a check on this index, so that c - 'a' >= 0 && c - 'a' < 26 so you don't index outside the bounds of the array.

Zorg er ook voor dat u elk element van de array in 0 initialiseert, zodat de telling van elk teken in eerste instantie begint met 0, zoals hieronder:

int count[26] = { };

Hiermee worden alle elementen ingesteld op 0 .

U wilt misschien ook tolower (c) - 'a' gebruiken in plaats van alleen c = 'a' , zodat de brief in kleine letters wordt geschreven, ongeacht of het kleine letters of kleine letters zijn. niet zo dat de array de telling van zowel hoofdletters als kleine versies van de letters bevat, bijvoorbeeld zowel 'a' en 'A' zal tellen [0 ] . Maar dat is aan jou en hoe je wilt dat je programma werkt.

Verder leest uw code geen bestand, het gebruikt getchar die leest uit stdin (de console). Neem een ​​kijkje op fopen , fclose en fread om een ​​bestand te lezen en de inhoud ervan te verwerken.

5
toegevoegd

Ik vind dat je alleen huiswerk moet maken.

Hoe dan ook, probeer dit:

#include 
#include 

int main() 
{
    int count[26];
    int i, c;
    for(i = 0; i < 26; i++)
    {
       count[i] = 0;
    }
    while ((c = getchar()) != EOF)
    {
        if (isalpha(c)) 
        {
            ++count[tolower(c) - 'a'];
        }
    } 
} 
2
toegevoegd
"Ik vind dat je zelf huiswerk moet maken ... dus hier is het antwoord. Ook is het kapot voor hoofdletters.
toegevoegd de auteur Ed S., de bron