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