#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#define MAX_NAME_LEN 50
#define MAX_LINE_LEN 500
typedef struct {
char name[MAX_NAME_LEN];
int number;
} Fruit;
void toLowerCase(char *s) {
for (int i = 0; s[i]; i++)
s
[i
] = (char)tolower((unsigned char)s
[i
]);}
void capitalize(char *s) {
if (s
[0]) s
[0] = (char)toupper((unsigned char)s
[0]); for (int i = 1; s[i]; i++)
s
[i
] = (char)tolower((unsigned char)s
[i
]);}
int cmp(const void *a, const void *b) {
Fruit *fa = (Fruit*)a;
Fruit *fb = (Fruit*)b;
return fb->number - fa->number;
}
int main() {
char line[MAX_LINE_LEN];
if (!fgets(line
, MAX_LINE_LEN
, stdin
)) return 1;
int capacity = 10, len = 0;
Fruit
*fruits
= (Fruit
*)calloc(capacity
, sizeof(Fruit
)); if (!fruits) return 1;
char *token
= strtok(line
, ", ."); while (token) {
toLowerCase(token);
bool found = false;
for (int i = 0; i < len; i++) {
if (strcmp(fruits
[i
].
name, token
) == 0) { fruits[i].number++;
found = true;
break;
}
}
if (!found) {
if (len == capacity) {
capacity *= 2;
Fruit
*temp
= realloc(fruits
, capacity
* sizeof(Fruit
)); if (!temp
) { free(fruits
); return 1; } fruits = temp;
}
strncpy(fruits
[len
].
name, token
, MAX_NAME_LEN
- 1); fruits[len].name[MAX_NAME_LEN - 1] = '\0';
fruits[len].number = 1;
len++;
}
}
qsort(fruits
, len
, sizeof(Fruit
), cmp
);
printf("%-15s\t%-8s\n", "Fruit", "Freq"); for (int i = 0; i < len; i++) {
capitalize(fruits[i].name);
printf("%-15s\t%-8d\n", fruits
[i
].
name, fruits
[i
].
number); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkYm9vbC5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCiNkZWZpbmUgTUFYX05BTUVfTEVOIDUwCiNkZWZpbmUgTUFYX0xJTkVfTEVOIDUwMAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBuYW1lW01BWF9OQU1FX0xFTl07CiAgICBpbnQgbnVtYmVyOwp9IEZydWl0OwoKdm9pZCB0b0xvd2VyQ2FzZShjaGFyICpzKSB7CiAgICBmb3IgKGludCBpID0gMDsgc1tpXTsgaSsrKQogICAgICAgIHNbaV0gPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKXNbaV0pOwp9Cgp2b2lkIGNhcGl0YWxpemUoY2hhciAqcykgewogICAgaWYgKHNbMF0pIHNbMF0gPSAoY2hhcil0b3VwcGVyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogICAgZm9yIChpbnQgaSA9IDE7IHNbaV07IGkrKykKICAgICAgICBzW2ldID0gKGNoYXIpdG9sb3dlcigodW5zaWduZWQgY2hhcilzW2ldKTsKfQoKaW50IGNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CiAgICBGcnVpdCAqZmEgPSAoRnJ1aXQqKWE7CiAgICBGcnVpdCAqZmIgPSAoRnJ1aXQqKWI7CiAgICByZXR1cm4gZmItPm51bWJlciAtIGZhLT5udW1iZXI7Cn0KCmludCBtYWluKCkgewogICAgY2hhciBsaW5lW01BWF9MSU5FX0xFTl07CiAgICBpZiAoIWZnZXRzKGxpbmUsIE1BWF9MSU5FX0xFTiwgc3RkaW4pKSByZXR1cm4gMTsKICAgIGxpbmVbc3RyY3NwbihsaW5lLCAiXG4iKV0gPSAwOwoKICAgIGludCBjYXBhY2l0eSA9IDEwLCBsZW4gPSAwOwogICAgRnJ1aXQgKmZydWl0cyA9IChGcnVpdCopY2FsbG9jKGNhcGFjaXR5LCBzaXplb2YoRnJ1aXQpKTsKICAgIGlmICghZnJ1aXRzKSByZXR1cm4gMTsKCiAgICBjaGFyICp0b2tlbiA9IHN0cnRvayhsaW5lLCAiLCAuIik7CiAgICB3aGlsZSAodG9rZW4pIHsKICAgICAgICB0b0xvd2VyQ2FzZSh0b2tlbik7CiAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgaWYgKHN0cmNtcChmcnVpdHNbaV0ubmFtZSwgdG9rZW4pID09IDApIHsKICAgICAgICAgICAgICAgIGZydWl0c1tpXS5udW1iZXIrKzsKICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgaWYgKGxlbiA9PSBjYXBhY2l0eSkgewogICAgICAgICAgICAgICAgY2FwYWNpdHkgKj0gMjsKICAgICAgICAgICAgICAgIEZydWl0ICp0ZW1wID0gcmVhbGxvYyhmcnVpdHMsIGNhcGFjaXR5ICogc2l6ZW9mKEZydWl0KSk7CiAgICAgICAgICAgICAgICBpZiAoIXRlbXApIHsgZnJlZShmcnVpdHMpOyByZXR1cm4gMTsgfQogICAgICAgICAgICAgICAgZnJ1aXRzID0gdGVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJuY3B5KGZydWl0c1tsZW5dLm5hbWUsIHRva2VuLCBNQVhfTkFNRV9MRU4gLSAxKTsKICAgICAgICAgICAgZnJ1aXRzW2xlbl0ubmFtZVtNQVhfTkFNRV9MRU4gLSAxXSA9ICdcMCc7CiAgICAgICAgICAgIGZydWl0c1tsZW5dLm51bWJlciA9IDE7CiAgICAgICAgICAgIGxlbisrOwogICAgICAgIH0KICAgICAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiLCAuIik7CiAgICB9CgogICAgcXNvcnQoZnJ1aXRzLCBsZW4sIHNpemVvZihGcnVpdCksIGNtcCk7CgogICAgcHJpbnRmKCIlLTE1c1x0JS04c1xuIiwgIkZydWl0IiwgIkZyZXEiKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBjYXBpdGFsaXplKGZydWl0c1tpXS5uYW1lKTsKICAgICAgICBwcmludGYoIiUtMTVzXHQlLThkXG4iLCBmcnVpdHNbaV0ubmFtZSwgZnJ1aXRzW2ldLm51bWJlcik7CiAgICB9CgogICAgZnJlZShmcnVpdHMpOwogICAgcmV0dXJuIDA7Cn0K
QXBwbGUsIE1hbmdvLCBPcmFuZ2UsIGFwcGxlLCBwaW5lYXBwbGUsIGFwcGxlLCBiYW5hbmEsIG1hbmdvLCBiYW5hbmEsIGJhbmFuYQ==
Apple, Mango, Orange, apple, pineapple, apple, banana, mango, banana, banana