Удалить слово из строки
Никак не получается задание. 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);
}
Намудренный достаточно код, но вроде протестировал рабочий.