Страница 1 из 1
Задачка на си
Добавлено: 19 дек 2007, 17:42
Raider
помогите реализовать задачу в код....
Форматирование текста. Дан текстовый файл, который содержит строки различной длины. Создайте новый файл, в котором сохраните исходный текст в отформатированном виде, т.е. в тексте не должно быть строк длиной, превышающей заданную, правый край текст должен быть, выровнен за счет равномерного увеличения промежутков между словами. Разбивать строки разрешается только по концам слов.
Re: Задачка на си
Добавлено: 19 дек 2007, 17:50
WinMain
Задачу нужно сделать именно на Си или на С++ тоже можно?
Re: Задачка на си
Добавлено: 19 дек 2007, 18:30
Raider
вот именно что на си
Re: Задачка на си
Добавлено: 20 дек 2007, 19:57
Raider
вот что у меня получилось
Код: Выделить всё
#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);
}