Задачка на си

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Raider
Сообщения: 4
Зарегистрирован: 19 дек 2007, 02:03

помогите реализовать задачу в код....

Форматирование текста. Дан текстовый файл, который содержит строки различной длины. Создайте новый файл, в котором сохраните исходный текст в отформатированном виде, т.е. в тексте не должно быть строк длиной, превышающей заданную, правый край текст должен быть, выровнен за счет равномерного увеличения промежутков между словами. Разбивать строки разрешается только по концам слов.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Задачу нужно сделать именно на Си или на С++ тоже можно?
Raider
Сообщения: 4
Зарегистрирован: 19 дек 2007, 02:03

вот именно что на си
Raider
Сообщения: 4
Зарегистрирован: 19 дек 2007, 02:03

вот что у меня получилось

Код: Выделить всё

#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);
}
Ответить