Удалить слова содержащие больше чем 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д