@Retr0Hacker

Как удалить из предложения слова, в которых нет указанной буквы?

Задание: "С клавиатуры ввести предложение. Удалить из него все слова, в которых нет указанной буквы.".

Не могу никак переделать функцию remove_words (она удаляет все слова в которых ЕСТЬ указанная буква, а надо наоборот).

Что и как переделать?

Вот мой код:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define MAX_SIZE 100
char* remove_words(char* s, int c);

int main()
{
    char s[MAX_SIZE];
    char c;

    printf("Enter string: ");
    gets_s(s);

    printf("Enter letter: ");
    scanf_s("%c", &c);

    puts(remove_words(s, c));

    return 0;
}

char* remove_words(char* s, int c) {
    int   g;
    char* i, * p, * t = s;
    for (p = s; *s; *s = *p) {
        if (!isspace(*p)) {
            i = p;
            g = 0;
            while (*i && !isspace(*i)) {
                if (*i == c)
                    g = 1;
                ++i;
            }

            if (g)
                p = i;
            else {
                while (p != i)
                    *s++ = *p++;
            }
        }
        else
            ++s, ++p;
    }
    return t;
}

P.S.
Я уже понял, что нужно if (*i == c) ==> if (*i != c), и, скорее всего, переделать вот этот участок:

if (g)
                p = i;
            else {
                while (p != i)
                    *s++ = *p++;
            }
        }
        else
            ++s, ++p;
    }
    return t;

Но что бы я не пробовал, ничего не помогает.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Если бы вы использовали нормальные имена переменных, то вам бы сразу стало очевидно, какую одну строчку (даже один символ!) надо изменить, чтобы стали удалятся слова без буквы, вместо слов с буквами.

Подумайте, что хранится в переменной g - что она означает, какой ее физический смысл, какие значения и при каких условиях она принимает?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы