Hirdetés

Új hozzászólás Aktív témák

  • Fire/SOUL/CD

    félisten

    válasz babyanigirl #689 üzenetére

    Hali!

    Na csak meg lett. Olyan kód volt a forrásba, amit a PH is használ formázásra...

    #include <stdio.h>
    #include <stdlib.h>

    //ha többször használod ugyanazt az értket, akkor azt célszerű így definiálni
    //így megelőzhető az elgépelésekből adodó hibák
    #define MAXCHAR 256

    int CharCounter[MAXCHAR];

    int main()
    {
    int i;
    //a karakterek(így a betűk, számok, stb) egy byte-on tárolódnak az értékük 0-255 lehet
    //ezért nem int típust, hanem unsigned char típust deklarálunk
    unsigned char ch;
    FILE * TextFileAsBinary;
    FILE * OutputTextFile;

    printf("Karakter-szamlalo\n\n");

    //kinullázzuk a tömbünket. ez azonban jelen esetben teljesen felesleges
    //mivel a fórdító automatikusan elvégzi ezt a feladatot. Természetesen ha
    //többször kellene használni a tömböt, akkor szükséges lehet az "újranullázás"
    for (i=0;i<MAXCHAR;CharCounter[i++]=0);

    //minden fájl megnyitásakor kötelező a hibaellenőrzés!
    if (!(TextFileAsBinary = fopen("input.txt","rb"))) {
    fprintf(stderr,"Nem lehet megnyitni a fajlt...");
    exit(-1);
    }
    //az fread függvény (jelen esetben) 1 darab, 1 byte hosszú adatot olvas be ch-be
    //a korábban megnyitott "input.txt" fájlból
    //a visszatérő értéke olvasás esetén mindig annyi, amennyit megadtunk neki
    //jelen esetben 1. Ha nem ennyivel tér vissza, az azt jelenti, hogy a fájl végére értünk
    //vagy valamilyen fájlolvasási hiba lépett fel
    while (fread(&ch,1,1,TextFileAsBinary)==1) CharCounter[ch]++;
    fclose(TextFileAsBinary);

    //kimeneti fájl megnyitása, mindig kérdés nélkül felülírodik!
    if (!(OutputTextFile = fopen("output.txt","wt"))) {
    fprintf(stderr,"Nem lehet irni a fajlt...");
    exit(-1);
    }
    //itt azért 16-ról indítom a ciklust, mert ez alatt többnyire karakteres vezérlőkódok
    //találhatók(return, tab, sipolás, visszatörlés stb), amikor ezeket beleírnád a fájlba
    //akkor furcsán mutatna
    for (i=16;i<MAXCHAR;i++) {
    //csak akkor írok fájlba, ha előfordult az 'i' karakter, ha nem akkor felesleges
    if (CharCounter[i]) {
    fprintf(OutputTextFile,"Gyakorisága a(z) %c karakternek: %d\n",i,CharCounter[i]);
    }
    }
    fclose(OutputTextFile);

    return 0;
    }

    Fire.

    Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)

Új hozzászólás Aktív témák