TheAlgorithms-C/exercism/word_count/word_count.c
2022-09-27 10:58:15 -05:00

92 lines
2.3 KiB
C

#include "word_count.h"
#include <string.h>
/*
word_count: returns the full number of words in the input_text,
otherwise an error code: (see below)
error codes: EXCESSIVE_LENGTH_WORD -1
EXCESSIVE_NUMBER_OF_WORDS -2
The function manipulates the given structure of type word_count_word_t
After that process the member count contains the number of occures.
*/
int word_count(const char *input_text, word_count_word_t *words)
{
char word_list[MAX_WORDS][MAX_WORD_LENGTH];
char input[1000];
strcpy(input, input_text);
char *p_str = input;
/* index for iteration over input string */
int index = 0;
/* index for word_list */
int index_list = 0;
/* counts all words */
int count_all = 0;
/* for controlling the while loop */
int loop = 1;
/* for the for-loop */
int i = 0;
/* collects all words in the word_list */
while (input[index] && loop)
{
if (input[index] == ' ')
{
input[index] = '\0';
if (strlen(p_str) <= MAX_WORD_LENGTH)
{
if (index_list <= MAX_WORDS)
{
strcpy(word_list[index_list], p_str);
/* sets pointer to the next position */
p_str = input + index + 1;
index_list++;
/* counts the word */
count_all++;
}
else /* error case too many words */
{
count_all = EXCESSIVE_NUMBER_OF_WORDS;
loop = 0;
}
}
else /* error case: word is too long */
{
count_all = EXCESSIVE_LENGTH_WORD;
loop = 0;
}
}
index++;
}
words->count = 0;
/* make sure none error is occurred */
if (loop)
{
/* collects the last word up to the \0-character. and counts it.*/
strcpy(word_list[index_list], p_str);
count_all++;
for (i = 0; i <= index_list; i++)
{
if (strcmp(word_list[i], words->text) == 0)
{
words->count++;
}
}
}
/* returns the number of words or an error code */
return count_all;
}