Ошибка вывода. Дан текст. Удалить из текста все повторные вхождения слов (последовательность разделителей сохранять). Вероятно, ошибка в strncmp

Должны быть выведены все символы, при аналогичном вводе

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>

int my_strncmp(const char* firstS, const char* secondS, int n) {
        while (n--) {
            if (*firstS != *secondS) return *firstS - *secondS;
            if (*firstS == '\0') return 0;
            firstS++;
            secondS++;
        }
        return 0;
}

char* my_strcat(char* result, const char* toAdd) {
    char* ptr = result;
    while (*ptr != '\0') {
        ptr++;
    }
    while (*toAdd != '\0') {
        *ptr = *toAdd;
        ptr++;
        toAdd++;
    }
    *ptr = '\0';
    return result;
}

char* my_strncat(char* result, char* toAdd, int n) {
    char* ptr = result;
    while (*ptr != '\0') {
        ptr++;
    }
    while (*toAdd != '\0' && n > 0) {
        *ptr = *toAdd;
        ptr++;
        toAdd++;
        n--;
    }
    *ptr = '\0';
    return result;
}
// функция проверки разделителем
int is_razdel(char c, char* razdel) {
    while (*razdel) {
        if (c == *razdel)
            return 1;
        razdel++;
    }
    return 0;
}

int main() {
    char text[100];
    char result[100] = ""; // инициализация массива для результата
    char* words[100]; // массив для хранения уникальных слов
    int word_count = 0, // счетчик уникальных слов
        repeat = 0;
    char* word; // указатель на слово
    char razdel[] = " ,.!?-\n"; // разделители

    printf("input: ");
    fgets(text, 100, stdin);

    // разбиение текста
    char* ptr = text;
    while (*ptr != '\0') {
        repeat = 0; // Reset repeat flag for each word
        // начало слова
        while (*ptr != '\0' && is_razdel(*ptr, razdel))
            ptr++;
        // cохраняем начало слова
        word = ptr;
        // конец слова
        while (*ptr != '\0' && !is_razdel(*ptr, razdel))
            ptr++;
        // cохраняем конец слова
        char* end_word = ptr;
        // проверяем, было ли такое слово
// проверяем, было ли такое слово
        for (int i = 0; i < word_count; i++) {
            if (my_strncmp(words[i], word, end_word - word) == 0 ){
   
                    repeat = 1;
                    break;
                
            }
        }
        // если не повторялось, то добавляем
        if (!repeat) {
            my_strncat(result, word, end_word - word);
            words[word_count++] = word;
        }
        // добавляем разделитель
        if (*ptr != '\0') {
            my_strncat(result, ptr, 1);
            // my_strcat(result, " ");
            ptr++;
        }
    }
    printf("output: %s\n", result);
}

Ответы (0 шт):