Quick actions

cmd+k|ctrl+k

Navigation

Languages

count char

Snippet info

Language

C

Visibility

public

Author

hyrious

Created

2019-11-17T14:39:48Z

Updated

2019-11-17T14:41:59Z

#define _CRT_SECURE_NO_WARNINGS

#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char ch;
    int count;
} Pair;

int comp(const void *pa, const void *pb) {
    Pair a = *(Pair *)pa;
    Pair b = *(Pair *)pb;
    if (a.count > b.count) return -1;
    if (a.count < b.count) return 1;
    return 0;
}

void pretty_print_char(char c) {
    switch (c) {
        case '\0'  : printf("  \\0"); break;
        case '\n'  : printf("  \\n"); break;
        case '\r'  : printf("  \\r"); break;
        case '\t'  : printf("  \\t"); break;
        case '\f'  : printf("  \\f"); break;
        case '\013': printf("  \\v"); break;
        case '\010': printf("  \\b"); break;
        case '\007': printf("  \\a"); break;
        case '\033': printf("  \\e"); break;
        case ' '   : printf(" ' '") ; break;
        case '\\'  : printf(" \\\\"); break;
        case '\x7f': printf(" \\c?"); break;
        default: if (isgraph(c)) {
            printf("%4c", c);
        } else {
            printf("\\x%02x", (int)c);
        }
    }
}

int main(void) {
    Pair array[256];
    for (int i = 0; i < 256; ++i) {
        array[i].ch = (char)i;
        array[i].count = 0;
    }
    char line[648];
    if (fgets(line, sizeof line, stdin)) {
        int len = strlen(line);
        for (int i = 0; i < len; ++i) {
            array[(int)line[i]].count++;
        }
        qsort(array, 256, sizeof(Pair), comp);
        for (int i = 0; array[i].count; ++i) {
            pretty_print_char(array[i].ch);
            printf(": %3d, %5.2lf%%\n", array[i].count, array[i].count * 100.0 / len);
        }
    }
    return 0;
}
INFO