mirror of
https://github.com/D4C1-Labs/Flipper-ARF.git
synced 2026-03-30 16:45:38 +00:00
45 lines
1.5 KiB
C
45 lines
1.5 KiB
C
#include <stdio.h>
|
|
#include "m-string.h"
|
|
#include "m-dict.h"
|
|
#include "m-array.h"
|
|
|
|
/* Definition of an associative map string_t --> size_t */
|
|
DICT_DEF2(dict_str, string_t, size_t)
|
|
#define M_OPL_dict_str_t() DICT_OPLIST(dict_str, STRING_OPLIST, M_DEFAULT_OPLIST)
|
|
|
|
/* Definition of an array of string_t */
|
|
ARRAY_DEF(vector_str, string_t)
|
|
#define M_OPL_vector_str_t() ARRAY_OPLIST(vector_str, STRING_OPLIST)
|
|
|
|
int main(void)
|
|
{
|
|
// Construct an array of string, performing a convertion of the C const char *
|
|
// into a proper string_t at real time and push then into a dynamic array
|
|
// that is declared, initialized and cleared.
|
|
M_LET( (words, ("This"), ("is"), ("a"), ("useless"), ("sentence"), ("."),
|
|
("It"), ("is"), ("used"), ("a"), ("bit"), ("to"), ("count"), ("words"), (".") ),
|
|
vector_str_t) {
|
|
// Print the arrays.
|
|
printf("The words are: ");
|
|
vector_str_out_str(stdout, words);
|
|
printf("\n");
|
|
|
|
// Count the words.
|
|
M_LET(map, dict_str_t) {
|
|
// Count the words:
|
|
for M_EACH(w, words, vector_str_t) {
|
|
(*dict_str_safe_get(map, *w)) ++;
|
|
}
|
|
|
|
// Print the count:
|
|
for M_EACH(p, map, dict_str_t) {
|
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
|
|
M_PRINT(p->value, " occurences of ", p->key, "\n");
|
|
#else
|
|
printf ("%zu occurences of %s\n", p->value, string_get_cstr(p->key));
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
}
|