Удалить слова содержащие больше чем 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
символов.
Список изменений, которые происходят в коде:
- Ввод текста и его длины с помощью
fgets
иscanf
. - Инициализация указателей
begin
иend
на начало текста. - Пропуск символов, не являющихся буквами, с помощью цикла
while
иfor
. - Определение длины слова с помощью
end - begin
. - Если длина слова больше
length
, то слово удаляется с помощью циклаfor
и указателейend
иbegin
. - В конце функции возвращается исходный текст. Список переменных и их значений:
text
- исходный текст.length
- длина слова, которое необходимо удалить.begin
- указатель на начало слова.end
- указатель на конец слова.offset
- смещение указателяend
относительно указателяbegin
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д