Ввести строку и слово, удалить все вхождения слова и вывести строку

Рейтинг: 0Ответов: 1Опубликовано: 13.10.2014
#include <stdio.h>

#define MAXLINE 1000
#define MAXWORD 100
void copy(char to[], char from[]);

int main()
{
    int c, i=0, n, j=0, m, k ;
    char str[MAXLINE];
    char slv[MAXWORD];
    char nov[MAXLINE];

    int l=0;
    k=0;
    printf("Enter word:\n");
    for (i=0; i<(MAXWORD-1) && (c=getchar()) != EOF && c != '\n'; i++)
    {
        slv[i]=c;
        k++;
    }

    printf("Enter text:\n");
    for (i=0; i<(MAXLINE-1) && (c=getchar())!= EOF && c != '\n'; i++)
    {
        str[i]=c;
        l++;
    }

    int flag2 = 0;
    int flag1 = 0;
    int s = 0;

    for (i=0; i<l-1; i++)
    {
        if ((flag1 = 0) || (str[i] = ' '))
        {
            int beg1 = i;
            int beg2 = i;
            int beg3 = i;
            int beg4 = i;
            int flag1 = 1;
            while (str[beg1] !=' ')
            {
                int beg;
                if (str[beg2] != slv[beg]) {flag2 = 1;}
                if (beg == k) {break;}
                beg2++;
                beg++;
            }

            if (flag2 = 1)
            {
                while (str[beg3] !=' ')
                {
                    int beg;
                    nov[s] = slv[beg];
                    s++;
                    beg++;
                }
            }

            nov[s+1] = '\0';
            for(i = 0 ; i < s; i++)
            {
                printf("%c",nov[s]);
            }
        }
    }
}

Не работает, не получается у меня эта программа. Написать её нужно без string...

Суть алгоритма: просматриваем все слова, начиная с пробела или начала строки. Если есть несовпадения, записать слово в новый массив. Мой код ничего не выводит. Наверное, нужно указатели использовать, но я не знаю, как.

Ответы

▲ 3

@sSTUDENTUSs, пара слов про оформление в целом:

  1. Разбейте программу на функции. Пусть одна у вас получает весь текст, вторая слово, а в третьей будет происходить непосредственно работа. Так вы вынесете работающий код в отдельную область, которая не будет засорять вам обзор.
  2. Форматируйте код красиво, под конец уже сложно разобрать, какая скобка к какому блоку относится. Ровно то же самое про лишние вещи, засоряющие внимание

Теперь про реализацию.

Лично я бы пошел в лоб - есть два виртуальных курсора, один читает, другой записывает прочитанное, оба работают прямо с полученным текстом (или его копией). Они идут равномерно, но как только встречается слово, которое должно быть удалено, читающий курсор через слово перепрыгивает, и передает пишущему уже то, что идет за словом. Так как читающий курсор идет либо быстрее, либо одинаково с записывающим, длины строки гарантированно хватит на процедуру.

Вариант с массивами тоже вполне рабочий и куда более красивый, но потребует больше кода для нормального оформления.