summaryrefslogtreecommitdiffstats
path: root/1/13.c
diff options
context:
space:
mode:
authorSadeep Madurange <smadurange@users.noreply.github.com>2021-11-18 19:37:34 +0800
committerSadeep Madurange <smadurange@users.noreply.github.com>2021-11-18 19:37:34 +0800
commitbfd2c1b7774a7c7fa8d07d3b8de4794c56459db6 (patch)
tree82857590a7afffc3bbfa0d524a468add06501e6b /1/13.c
parent90a15aacce87b2e2f87d4629735ae4216a80764f (diff)
downloadk&r-exercises-bfd2c1b7774a7c7fa8d07d3b8de4794c56459db6.tar.gz
Improve code.
Diffstat (limited to '1/13.c')
-rw-r--r--1/13.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/1/13.c b/1/13.c
index e08cf46..ba093ad 100644
--- a/1/13.c
+++ b/1/13.c
@@ -4,40 +4,36 @@
/* prints a histogram of lengths of words in the input */
int main(int argc, char *argv[]) {
- int i, j, p, c, wc, cc, size;
- int data[MAXWRD];
+ int i, j, prev, curr, wordc, charc;
+ int stats[MAXWRD];
- p = '0';
- cc = wc = 0;
+ prev = '0';
+ charc = wordc = 0;
for (i = 0; i < MAXWRD; i++)
- data[i] = 0;
+ stats[i] = 0;
- while ((c = getchar()) != EOF) {
- if (wc >= MAXWRD) {
+ while ((curr = getchar()) != EOF) {
+ if (wordc >= MAXWRD) {
printf("Max word count %d exceeded\n", MAXWRD);
return 1;
}
- if (c == ' ' || c == '\t' || c == '\n') {
- if (p != ' ' && p != '\t' && p != '\n') {
- data[wc++] = cc;
- cc = 0;
+ if (curr == ' ' || curr == '\t' || curr == '\n') {
+ if (prev != ' ' && prev != '\t' && prev != '\n') {
+ stats[wordc++] = charc;
+ charc = 0;
}
} else {
- cc++;
+ charc++;
}
- p = c;
+ prev = curr;
}
- for (i = 0; i < MAXWRD; i++) {
- size = data[i];
- if (size == 0)
- break;
-
+ for (i = 0;(charc = stats[i]) > 0 && i < MAXWRD; i++) {
printf("%3d: ", i + 1);
- for (j = 0; j < size; j++)
+ for (j = 0; j < charc; j++)
putchar('x');
putchar('\n');
}