Поиск и выделение лишних пробелов с их последующим удалением - C (СИ)

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

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

Здравствуйте! Помогите, пожалуйста, с реализацией задания или хотя бы подскажите алгоритм удаления лишних пробелов без использования библиотек stdlib и string С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 500 символов (длина строки текста не должна превышать 70 символов). Написать программу, которая: -выводит текст на экран дисплея; -по нажатию произвольной клавиши поочередно выделяет в тексте лишние пробелы между словами; -выводит текст на экран дисплея еще раз, убирая лишние пробелы между словами и формирует текст в один абзац; Так реализовал вывод текста на экран:
#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();
}
p.s. тип текстового файла MS-DOS

Решение задачи: «Поиск и выделение лишних пробелов с их последующим удалением»

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;
}

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


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

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

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