-
Notifications
You must be signed in to change notification settings - Fork 0
/
wc.c
64 lines (55 loc) · 1.73 KB
/
wc.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/* MB 10.01.2013 wc.c */
/* Zeilen, Worte und Zeichen der Standardeingabe erfassen */
/*@+charint*/
# include <stdio.h>
# include <stdlib.h>
#define ANSI_COLOR_CYAN "\x1b[36m"
#define ANSI_COLOR_RESET "\x1b[0m"
//#define durchschnitt( A, N, C ) A+=((N-A)/(A))
float durchschnitt(float *alt, int neu, int anzahl){
return (*alt) += (neu-(*alt)) / (++anzahl);
}
int main(int argc, char *argv[]){
// Array zum zählen der Buchstaben häufigkeit
// von '!'(33) bis '~'(126) Zeichen zu zählen (94 Zeichen)
// '!' = offset
unsigned short int anzahl[94];
// Standardeingabe Char
char c;
int i;
// Ausgabewerte
int worte = 0, zeilen = 1, zeichen = 0;
int letzte_wort_len = 0;
float avg_wort_len = 0;
// Zählarray initialisieren
for (i=0; i<94; i++) anzahl[i] = 0;
// Alle Eingabechars verarbeiten
while ((c = getchar()) != EOF){
zeichen ++;
if (c == '\n')
zeilen ++;
if (c == ' ' || c == '\t' || c == '\n'){
if(letzte_wort_len > 0){
// Wort beendet -> neue dursch. Wortlänge -> Wortzahl erhöhen
durchschnitt(&avg_wort_len, letzte_wort_len, worte++);
//durchschnitt(avg_wort_len, letzte_wort_len, ++worte);
letzte_wort_len = 0;
}
}
else {
// Anderes Zeichen -> gehört zum Wort
// Zählen darstellbarer Zeichen
if ((c-'!') <= ('~'-'!')) anzahl[c-'!']++;
letzte_wort_len++;
}
}
// Ausgabe :
printf("%d Wörter, \t %d Zeilen, \t %d Zeichen \n", worte, zeilen, zeichen);
printf("Durchschnittliche Wortlänge: %f \n \n", avg_wort_len);
printf("Zeichen\t\tVorkommen \n");
for (i='!'; i<='~'; i++){
if(anzahl[i-'!'])
if(anzahl[i-'!'] > (zeichen / 20)) printf(ANSI_COLOR_CYAN "%c\t\t%d\n" ANSI_COLOR_RESET, i, anzahl[i-'!']);
else printf("%c\t\t%d\n", i, anzahl[i-'!']);;
}
}