Удалить слова содержащие больше чем N символов с помощью указателей - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание:

Удалить слова содержащие больше чем N символов с помощью указателей.

уже дня 4 пытаю указатели, ничерта не получается. тут мне выдало какую-то ошибку вдруг: непредвиденное обнаружение конца файла. где он обнаружил не понимаю. и вообще правильно ли я написал программу, помогите пожалуйста
#include <stdio.h>
#include <string.h>
#define n 1000
#define max 5
void process_line(char line);
{
    char *p1,*p2,*p3,dl;
    p1=&line[0]; //находится в начале слова, для удаления длинного слова
    p2=&line[0]; //ищет конец слова, так же для удаления длинного слова
    p3=&line[0]; //ищет начало нового слова, для указателя p1
    for (;*p2!='\0';p2++)
    {
        if (*p2==' ')
        {
            dl=p2-p1;
            if (dl>max)
                for (;*p2!='\0';p1++,p2++)
                    *p1=*p2;
            for (;*p3!='\0';p3++)
            {
                if (*p3==' ')
                {
                    p1=p3;
                    goto exit1;
                }
            }
            exit1:;
}
void main (void)
{
    char line[n];
    gets(line);
    process_line(line);
    puts(line);
    getchar();
}

Решение задачи: «Удалить слова содержащие больше чем N символов с помощью указателей»

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
 
//-----------------------------------------------------------------------------
char* RemoveWords(char* text, size_t length)
{
   char* begin = text;
   char* end = text;
   int offset = 1;
 
   while (offset > 0)
   {
      for (begin = end; *begin && !isalpha(*begin); ++begin) { ; }
 
      for (end = begin; *end && isalpha(*end); ++end) { ; }
 
      offset = end - begin;
 
      if (offset > length)
      {
         for (; *end; ++end)
         {
            *(end - offset) = *end;
         }
         *(end - offset) = 0;
         end = begin;
      }
   }
 
   return text;
}
//-----------------------------------------------------------------------------
 
int main()
{
   char text[256] = {'\0'};
 
   printf("text: ");
   fgets(text, sizeof(text) - 1, stdin);
 
   size_t length;
   printf("length: ");
   scanf("%u", &length);
 
   printf("result: %s\n", RemoveWords(text, length));
 
   return 0;
}

Объяснение кода листинга программы

В этом коде реализована функция RemoveWords, которая удаляет из текста слова, содержащие больше length символов. Список изменений, которые происходят в коде:

  1. Ввод текста и его длины с помощью fgets и scanf.
  2. Инициализация указателей begin и end на начало текста.
  3. Пропуск символов, не являющихся буквами, с помощью цикла while и for.
  4. Определение длины слова с помощью end - begin.
  5. Если длина слова больше length, то слово удаляется с помощью цикла for и указателей end и begin.
  6. В конце функции возвращается исходный текст. Список переменных и их значений:
  7. text - исходный текст.
  8. length - длина слова, которое необходимо удалить.
  9. begin - указатель на начало слова.
  10. end - указатель на конец слова.
  11. offset - смещение указателя end относительно указателя begin.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы