Удалить слово из строки

Никак не получается задание. q-строка q2-заданное слово Изначально пробовала с функцией strstok, но потом до меня дошло, что я не смогу сравнить тогда e(результат strtok) с заданным словом, так как e возвращает указатель на символ пробела. Помогите, пожалуйста)

void task_5(char q[], char q2[]) {
    int i,num;
    char* e;
    char p[50];
    //e = strtok(q, " ");
    //while (e != NULL) {
        for (i = 0; i < strlen(q); i++) {
            if (q[i] == ' ') {
                num = i;
            }
        }

        for (i = 0; i < num; i++) {
            p[i] = q[i];
        }
        if (strcmp(p, q2) == 0) {
            for (i = 0; i < strlen(q2); i++) {
                q[i] = '\0';
            }
        }
        puts(q);
        
        //e = strtok(NULL, " ");}
    
}


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

Автор решения: Павел Ериков

Вот пример кода с комментариями:

void task_5(char q[], char q2[]) {
char* e = q;
char* e2 = q2;
char* temp;
int size = strlen(q2);
int t = 0;

while (*e != '\0') {
    //указатель на начало слова
    e2 = q2;

    //Найдем первую букву слова q2 в q
    while (*e != '\0' && *e != *e2) ++e;

    //сохраняем начало найденного слова
    temp = e;

    //Если мы нашли 1 букву как в слова q2 то дальше сравниваем слово
    t = 0; //счетчик совподающих букв
    while (*e != '\0' && *e == *e2) {
        ++e;
        ++e2;
        ++t;
    }

    //указатель на конец слова
    char* t1 = e;
    //Если не конец строки, и кол-во совпадающих букв = длине слова, и *e 
    //указывает на пробел после найденного слова, а не на букву слова
    if (*temp != '\0' && t == size && *e == ' ') {
        //Смещаем все что после найденного слова на место этого найденного слова
        while (*t1 != '\0') {
            *temp = *t1;
            ++temp;
            ++t1;
        }
        *temp = '\0';
    }
}

puts(q);

}

Намудренный достаточно код, но вроде протестировал рабочий.

→ Ссылка