/* --------------------------------------------------- */ /* --- Pocitanie vyskytu znakov --- */ /* --------------------------------------------------- */ /* --------------------------------------------------- zapocet z C pre 3MI december 1996 --------------------------------------------------- Uloha c.1: ---------- - upravte program tak, aby spocital vyskyt znakov: '(', ')' spolu do jedneho pocitadla, '{', '}' spolu do jedneho pocitadla Uloha c.2: ---------- - upravte program tak, aby okrem "absolutneho" poctu znakov vypisal sucasne percentualny vyskyt danych kategorii znakov - aku zmenu by ste navrhli aby program spocital vyskyt jednotlivych pismen 'A'...'Z', 'a'...'z' --------------------------------------------------- */ #include #include #include int main(int argc, char * argv[]) { /* --- Deklaracia premmenych --- */ int c; int n_spaces, n_tabs, n_digits, n_others; int ret_value; FILE * input; if (argc <= 1) { /* --- ak nemame dost zadanych argumentov budeme citat zo standardneho vstupu --- */ input = stdin; } else { /* --- otvor subor zadany z prikazoveho riadku na citanie --- */ argc--; argv++; input = fopen(argv[0], "r"); if (!input) { printf("Nemozem nasjst, alebo otvorit zadany subor !\n"); return -1; } } /* --- vynulovat pocitadla --- */ n_spaces = n_tabs = n_digits = n_others = 0; while ((c = fgetc(input)) != EOF) { /* --- podla toho aky "typ" znaku bol zadany treba inkrementovat prislusne pocitadlo --- */ switch (c) { case ' ': n_spaces ++; break; case '\t': n_tabs ++; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': n_digits ++; break; default: n_others ++; break; } } /* --- nevratil fgetc EOF preto, ze nastala nejaka chyba ? --- */ if (ferror(input)) { printf("Chyba pri citani suboru !\n"); ret_value = -1; } else { if (input == stdin) printf("Bolo zadanych:\n"); else printf("Subor \"%s\" obsahuje :\n ", argv[0]); printf("\tMedzier : %d\n", n_spaces); printf("\tTabelatorov : %d\n", n_tabs); printf("\tCislic : %d\n", n_digits); printf("\tOstatnych znakov : %d\n", n_others); ret_value = 0; } /* --- ak bol vstup citany zo suboru treba ho zavriet --- */ if (input != stdin) fclose(input); /* --- treba vratit vysledok cinnosti programu --- */ return ret_value; }