помогите реализовать задачу в код....
Форматирование текста. Дан текстовый файл, который содержит строки различной длины. Создайте новый файл, в котором сохраните исходный текст в отформатированном виде, т.е. в тексте не должно быть строк длиной, превышающей заданную, правый край текст должен быть, выровнен за счет равномерного увеличения промежутков между словами. Разбивать строки разрешается только по концам слов.
Задачка на си
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
Задачу нужно сделать именно на Си или на С++ тоже можно?
вот что у меня получилось
Код: Выделить всё
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <io.h>
#include <conio.h>
int flength,length;
char *str;
void format(char *s)
{
char *w=(char*)malloc(flength),*wn=(char*)malloc(flength),
*cw=(char*)malloc(flength);
strset(w,0);
strset(wn,0);
strset(cw,0);
w=strtok(s," ");
wn=strtok(NULL," ");
while (w!=NULL && wn!=NULL){
if ((wn)&&(w)) {
if (strlen(w)<length){
strcat(*(text+curline),w);
strcat(*(text+curline)," ");
strcpy(cw,w);
w=strtok(NULL," ");
if (strlen(cw)+strlen(wn)<length) {strcat(*(text+curline),wn);wn=strtok(NULL," ");strcat(*(text+curline)," ");if ((!wn)||(!w)) curline++;} else curline++;}}}
}
void format(char *s)
{
char *w=(char*)malloc(flength),*tmp=(char*)malloc(flength),
*st=(char*)malloc(flength);
strset(w,0);
strset(tmp,0);
strset(st,0);
strcpy(st,s);
if (strlen(s)>length) {
w=strtok(st," ");
while (w!=NULL){
if (strlen(*(text+curline))+strlen(w)<length){
strcat(*(text+curline),w);
strcat(*(text+curline)," ");} else {
strcat(tmp,*(text+curline+length-(s-w)));
strcat(tmp,*(text+curline+1));
strcpy(*(text+curline+1),tmp);
break;}
w=strtok(NULL," ");}}
char *spaces(char *s)
{
int count=0,sp=0;
char *c=(char*)malloc(length);
strset(c,0);
strcpy(c,s);
char *out=(char*)malloc(length);
strset(out,0);
char *w=(char*)malloc(length);
strset(w,0);
w=strtok(c," ");
while (w!=NULL){
count++;
w=strtok(NULL," ");}
sp=(length-strlen(s))/(count-1);
strset(c,0);
strcpy(c,s);
strset(w,0);
w=strtok(c," ");
while (w!=NULL){
strcat(out,w);
for (int i=0;i<sp;i++) strcat(out," ");
w=strtok(NULL," ");
if (!(w!=NULL)) {for (int i=0;i<(length-strlen(out));i++) strcat(out," ");};}
return out;
}
int main()
{
clrscr();
int i;
printf("\néóÑñ¿ΓÑ ¬«½¿τÑßΓó« ß¿¼ó«½«ó ó ßΓ᫬Ñ:\n");
scanf("%d",&length);
FILE *f=fopen("text.txt","rt");
FILE *outf=fopen("out.txt","w+t");
flength=filelength(fileno(f));
str=(char*)malloc(flength);
strset(str,0);
char *st=(char*)malloc(flength);
strset(st,0);
char *s=(char*)malloc(flength);
strset(s,0);
while (feof(f)==0) {
fgets(st,flength,f);
strcat(str,st);
if (strlen(str)<length) {
s=spaces(str);}
fputs(s,outf);}
fclose(outf);
}