Exercise 1-14-1 (horizontal - Histogram of frequencies)
Chapter_1 Exercise_1-13-2 | Exercise_1-14-2 |
Exercise 1-14 K&R, p. 24
Exercise 1-14. Write a program to print a histogram of the frequencies of different characters in its input.
histch.c download
#include <stdio.h> // for getchar(), putchar(), printf(), EOF
// histogram of frequencies of different characters, horizontally
int main()
{
int c, i, j;
int digits[10]; // 0..9
int lower[26]; // a..z
int upper[26]; // A..Z
int white[6]; // whitespace: ' ', '\t', '\n', '\f', '\r', '\v'
for (i = 0; i < 10; i++) // initialize
{digits[i] = 0;} // initially, 0 occurrences
for (i = 0; i < 26; i++) // initialize
{lower[i] = upper[i] = 0;}
for (i = 0; i < 6; i++) // initialize
{white[i] = 0;}
while ((c = getchar()) != EOF)
{
if (c == ' ') {white[0]++;}
else if (c == '\t') {white[1]++;}
else if (c == '\n') {white[2]++;}
else if (c == '\f') {white[3]++;}
else if (c == '\r') {white[4]++;}
else if (c == '\v') {white[5]++;}
else if (c >= '0' && c <= '9')
{digits[c-'0']++;}
else if (c >= 'A' && c <= 'Z')
{upper[c-'A']++;}
else if (c >= 'a' && c <= 'z')
{lower[c-'a']++;}
}
printf("\t\tLEGEND:\n");
printf("Spaces: %d ", white[0]);
printf("Tabs: %d ", white[1]);
printf("Newlines: %d ", white[2]);
printf("Form feeds: %d ", white[3]);
printf("Returns: %d ", white[4]);
printf("Vertical tabs: %d ", white[5]);
putchar('\n');
printf("Digits:\t\t");
for (i = 0; i <= 9; i++)
{printf("%d ",i);}
putchar('\n');
printf("Occurrences:\t");
for (i = 0; i <= 9; i++)
{printf("%d ",digits[i]);}
putchar('\n');
printf("Lowercase:\t");
for (i = 'a'; i <= 'z'; i++)
{putchar(i);putchar(' ');}
putchar('\n');
printf("Occurrences:\t");
for (i = 0; i < 26; i++)
{printf("%d ",lower[i]);}
putchar('\n');
printf("Uppercase:\t");
for (i = 'A'; i <= 'Z'; i++)
{putchar(i);putchar(' ');}
putchar('\n');
printf("Occurrences:\t");
for (i = 0; i < 26; i++)
{printf("%d ",upper[i]);}
putchar('\n');
putchar('\n');
printf("\t\tHISTOGRAM:\n");
printf("Spaces:\t");
for (i = 0; i < white[0]; i++)
{putchar('-');}
putchar('\n');
printf("Tabs:\t");
for (i = 0; i < white[1]; i++)
{putchar('-');}
putchar('\n');
printf("Newlines:\t");
for (i = 0; i < white[2]; i++)
{putchar('-');}
putchar('\n');
printf("Form feeds:\t");
for (i = 0; i < white[3]; i++)
{putchar('-');}
putchar('\n');
printf("Returns:\t");
for (i = 0; i < white[4]; i++)
{putchar('-');}
putchar('\n');
printf("Vertical tabs:\t");
for (i = 0; i < white[5]; i++)
{putchar('-');}
putchar('\n');
printf("Digits:\n");
for (i = 0; i <= 9; i++)
{
printf("%d\t",i);
for (j = 0; j < digits[i]; j++)
{putchar('-');}
putchar('\n');
}
printf("Lowercase letters:\n");
for (i = 0; i < 26; i++)
{
putchar('a'+i);printf("\t");
for (j = 0; j < lower[i]; j++)
{putchar('-');}
putchar('\n');
}
printf("Uppercase letters:\n");
for (i = 0; i < 26; i++)
{
putchar('A'+i);printf("\t");
for (j = 0; j < upper[i]; j++)
{putchar('-');}
putchar('\n');
}
}
/*
gcc histch.c -o histch
./histch < histch.c // input source file
LEGEND:
Spaces: 604 Tabs: 0 Newlines: 134 Form feeds: 0 Returns: 0 Vertical tabs: 0
Digits: 0 1 2 3 4 5 6 7 8 9
Occurrences: 31 5 10 3 3 3 9 0 0 5
Lowercase: a b c d e f g h i j k l m n o p q r s t u v w x y z
Occurrences: 61 5 86 21 97 71 10 71 189 10 0 30 4 80 39 81 1 124 49 148 48 2 31 0 3 7
Uppercase: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Occurrences: 6 0 0 3 3 3 2 1 1 0 0 3 1 3 5 0 0 3 3 3 2 2 0 0 0 3
HISTOGRAM:
Spaces: ---------------------------------------------------...
Tabs:
Newlines: ---------------------------------------------------...
Form feeds:
Returns:
Vertical tabs:
Digits:
0 -------------------------------
1 -----
2 ----------
3 ---
4 ---
5 ---
6 ---------
7
8
9 -----
Lowercase letters:
a -------------------------------------------------------------
b -----
................
z -------
Uppercase letters:
A ------
B
................
Z ---
./histch < histch // input binary file
LEGEND:
Spaces: 57 Tabs: 37 Newlines: 30 Form feeds: 12 Returns: 9 Vertical tabs: 18
Digits: 0 1 2 3 4 5 6 7 8 9
Occurrences: 17 8 19 2 8 9 8 2 17 16
Lowercase: a b c d e f g h i j k l m n o p q r s t u v w x y z
Occurrences: 79 26 41 45 85 23 20 27 63 0 4 39 26 54 40 20 2 72 63 96 37 2 6 15 18 6
Uppercase: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Occurrences: 22 18 18 27 14 11 20 89 22 2 0 22 15 11 6 6 1 11 9 23 11 4 2 12 2 2
HISTOGRAM:
Spaces: ---------------------------------------------------------
Tabs: -------------------------------------
Newlines: ------------------------------
Form feeds: ------------
Returns: ---------
Vertical tabs: ------------------
Digits:
0 -----------------
1 --------
2 -------------------
3 --
4 --------
5 ---------
6 --------
7 --
8 -----------------
9 ----------------
Lowercase letters:
a -----------...
b --------------------------
.....................
z ------
Uppercase letters:
A ----------------------
B ------------------
.....................
Z --
*/
Chapter_1 Exercise_1-13-2 | BACK_TO_TOP | Exercise_1-14-2 |
Comments
Post a Comment