summary refs log blame commit diff stats
path: root/c/acronym/src/acronym.c
blob: 6bc3b10b7403545deca7c626e8efbeb89a0cac7f (plain) (tree)
1
2
3
4
5
6




                                      
                                                         







                                                            




                                                                            





                                                         
#include "acronym.h"
#include <ctype.h>
#include <stdlib.h>

char *abbreviate(const char *phrase) {
    if (phrase == NULL || phrase[0] == '\0') return NULL;

    size_t pos = 0;
    char *acronym = malloc(1 * sizeof(char));

    if (isalpha(phrase[0]))
        acronym[pos++] = toupper((unsigned char) phrase[0]);

    for (size_t idx = 0; phrase[idx] != '\0'; idx++)
        if ((phrase[idx] == ' ' || phrase[idx] == '-' || phrase[idx] == '_')
            && isalpha(phrase[idx + 1])) {
            acronym = realloc(acronym, (pos + 1) * sizeof(char));
            acronym[pos++] = toupper((unsigned char) phrase[idx + 1]);
        }

    acronym = realloc(acronym, (pos + 1) * sizeof(char));
    acronym[pos] = '\0';

    return acronym;
}