Поиск и выделение лишних пробелов с их последующим удалением - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, с реализацией задания или хотя бы подскажите алгоритм удаления лишних пробелов без использования библиотек stdlib и string
С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 500 символов (длина строки текста не должна превышать 70 символов).
Написать программу, которая:
-выводит текст на экран дисплея;
-по нажатию произвольной клавиши поочередно выделяет в тексте лишние пробелы между словами;
-выводит текст на экран дисплея еще раз, убирая лишние пробелы между словами и формирует текст в один абзац;
Так реализовал вывод текста на экран:
p.s. тип текстового файла MS-DOS
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
void main(void)
{
int i, lstr;
char *text, *filename="C:\\Docume~1\\TEXT.txt";
FILE *file_in, *file_out;
file_in=fopen(filename,"rb");
if((file_in=fopen(filename,"rb"))==NULL)
{
printf("\n error open %s",filename);
exit();
}
fseek(file_in, 0, SEEK_END);
lstr=ftell(file_in);
text=(char *)malloc((lstr+1)*sizeof(char));
fseek(file_in, 0, SEEK_SET);
clrscr();
for(i=0; i<lstr; i++)
fscanf(file_in, "%c", &text[i]);
*(text+lstr)='\0';
for(i=0; i<lstr; i++)
printf("%c", text[i]);
free(text);
fclose(file_in);
getchar();
}Решение задачи: «Поиск и выделение лишних пробелов с их последующим удалением»
textual
Листинг программы
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
//#include <string.h>
#include <graphics.h>
void search_pr (int sLen, char *str, int *pr, int *dl_pr);
void highlight (int sLen, char *str, int pr, int dl_pr);
void main(void)
{
FILE * f;
int i = 0, sLen, pr, dl_pr;
char *str, *filename;
clrscr();
printf("Enter name file: ");
gets (filename);
clrscr();
if ((f = fopen (filename, "rb")) != NULL)
{
fseek (f,0,SEEK_END);
sLen = ftell(f);
fseek (f,0,SEEK_SET);
str = (char *)malloc(sLen);
for(i=0;i<sLen-1;i++)
fscanf(f,"%c",&str[i]);
for(i=0;i<sLen-1;i++)
printf("%c", str[i]);
fclose(f);
free(filename);
getch();
pr = 0;
dl_pr = 0;
search_pr(sLen, str, &pr, &dl_pr);
while(pr > 0)
{
highlight(sLen, str, pr, dl_pr);
dl_pr=0;
search_pr(sLen, str, &pr, &dl_pr);
}
clrscr();
i = 0;
printf(" ");
while(str[i] == ' ')
i++;
for(i; i < sLen - 1; i++)
{
if(str[i] == ' ' && (str[i + 1] == '.' || str[i + 1] == '!'
|| str[i + 1] == '?' || str[i + 1] == ','
|| str[i + 1] == ';' || str[i + 1] == ':'))
continue;
if(!(str[i] == ' ' && str[i + 1] == ' '))
printf("%c", str[i]);
}
printf("%c", str[i-1]);
free(str);
}
else
main();
getch();
}
void highlight (int sLen, char *str, int pr, int dl_pr)
{
int i;
clrscr();
for (i = 0; i < pr - dl_pr + 1; i++)
putch (*(str + i));
textbackground (RED);
textcolor (BLACK);
for (i = pr - dl_pr + 1; i < pr; i++)
putch (*(str + i));
textbackground (BLACK);
textcolor (LIGHTGRAY);
for (i = pr; i < sLen-1; i++)
putch (*(str + i));
getch();
}
void search_pr (int sLen, char *str, int *pr, int *dl_pr)
{
int i;
for (i = *pr; i < sLen -1; i++)
{
if (*(str + i) == ' ')
*dl_pr = *dl_pr + 1;
else
{
if (*dl_pr > 1)
{
*pr = i;
return;
}
*dl_pr = 0;
}
}
*pr = -1;
return;
}