Удалить слова содержащие больше чем 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.