mirror of
https://github.com/TheAlgorithms/C
synced 2024-11-22 13:31:21 +03:00
92 lines
2.3 KiB
C
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;
|
|
}
|