Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 20:56   #1
Markuskus
Новичок
Джуниор
 
Регистрация: 09.11.2009
Сообщений: 1
По умолчанию Перенос слова на Си

Перенос слова. Преобразовать тест таки образом, чтобы длина строк не превышала заданного значения, используя при этом перенос слов.
Как делать я вообще не знаю.

Есть программа, но она не работает

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
const maxrule=4;

int gl(char lit)
{int i,res=0;
char *gl="уеыаоэяиюё";
for (i=0;i<strlen(gl);i++)
if (*(gl+i)==lit) {res =i;break;}
return res;
}

int sgl(char lit)
{int i,res=0;
char *sgl="цкнгшщзхъфвпрлджчсмтьб";
for (i=0;i<strlen(sgl);i++)
if (*(sgl+i)==lit) {res=i;break;}
return res;
}

int POSTFIKS (char *str)
{int last=strlen(str);
if (*(str+last-4)=='т'&& *(str+last-3)=='ь'&& *(str+last-2)=='с'&& *(str+last-1)=='я')
return (strlen(str)-3);
else return 0;

int PERENOSsgl(char *str)
{int i, rez=0;
for (i=0,i<strlen(str);i++)
if (sgl(*str+i))!=0 && sgl(*(str+i+1))!=0)
if (gl(*(str+i+2))!=0 && gl(*(str+i-1))!=0 &&*(str+i-2)!=''
&&*(str+i+3)!='' && *(str+i+3)!='/0' && i>=1) res=i;
return res;
}

int PERENOSsgl(char *str)
{int i,res=0;
for (i=0,i<strlen(str);i++)
if (gl(*str+i))!=0 && gl(*(str+i+1))!=0)
if (sgl(*(str+i+2))!=0 && sgl(*(str+i-1))!=0 &&*(str+i-2)!=''
&&*(str+i+3)!='' && *(str+i+3)!='/0' && i>=1) res=i;
return res;
}

int prestavki(char *str)
{char *nad="над", *pod="под", *pri="при", *pre="пре", *pro="про", *tmp;
tmp=(char*)calloc(4,sizeof(char));
if (strlen(str)>=6)
{
*(tmp+0)=*(str+0)
*(tmp+1)=*(str+1)
*(tmp+2)=*(str+2)
*(tmp+3)='\0'
}
else return 0;
if (strcmp(nad,tmp)==0)return 2;
if (strcmp(pod,tmp)==0)return 2;
if (strcmp(pri,tmp)==0)return 2;
if (strcmp(pre,tmp)==0)return 2;
if (strcmp(pro,tmp)==0)return 2;
free(tmp);
return 0;
}

int *perenos(char s)
res=(int*)calloc(maxrule,sizeof(int ));
if (strlen(s)>3)
{
*(res+0)=prestavki(s);
*(res+1)=PERENOSsgl(s);
*(res+2)=PERENOSsgl(s);
*(res+3)=POSTFIKS(s);
}
return res;
free(res);
}

int lastword(char *str, char *word)
{int i,p,a;
char *w;
for (i=0;i<strlen(str);i++)
if (**str+i)=='')p=i;
a=0;w=(char*)calloc(strlen(str)-p+1,sizeof(char));
for (i=p+1;i<strlen(str);i++) *(w+a++)=*(str+i);
*(w+a+1)='\0';
strcpy(word,w);
for (i=p; i<strlen(str);i++) *(str+i)='';
free (w);
return p;
}

void printperenos(char *str, int p)
{int i, a=0;
char *tmp;
tmp=(char*)calloc(strlen(str)-p+1,sizeof(char));
for (i=0;i<=p;i++)
printf ("%c%",*(str+1));
printf ("-\n");
for (i=p+1;i<strlen(str);i++)*(tmp+a++) =*(str+i);
*(tmp+a+1)='\0';
strcpy(str,tmp);
free(tmp);
}

void obrez(char *str)
{int len=strlen(str);
while *(str+len-1)=='' && len>0
{
*(str+len-1)='\0';
len--;
}
}

void main (int argc,char *argv[])
{FILE *text, *result;
int i,max,t,a,end;
char tmp[82],part[164];
char c;
int *p;
clrscr();
a=0;
if (argc!=3)
{printf ("d;lfk;lk;glk';lkdfkg");
return;
}
max=atoi(argv[2]);
if (!(text=fopen(argv[1],"r")))
{printf("Error open file argv[1]\n");
return;
}
p=(int*)calloc(maxrule,sizeof(int)) ;
for (i=0;i<max+50 && !feof(text);i++)
{
fscanf(text,"%c",&c);
if (c=='\n') c='';
*(part+i)=c;
*(part+i+1)='\0';
if (c=='' && i>max-a)
{
*(part+i)='\0';
end=lastword(part,tmp);
p=perenos(tmp);
obrez(tmp);obrez(part);
for (t=0;t<maxrule;t++)
if (*(p+t)!=0)
{
printf ("%s",part);
printperenos(tmp,*(p+t));
goto after;
}
printf ("%s\n",part);
afterrintf("%s",tmp);
a=strlen(tmp);
i=-1;
}
}
*(part+strlen(part)-1)='\0';
printf("%s",part);
free(p);
getch();
}

Последний раз редактировалось Markuskus; 08.12.2009 в 01:12.
Markuskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск слова Chartvit Общие вопросы C/C++ 0 06.12.2009 16:02
Слова (Паскаль) Паскалька^^ Помощь студентам 15 13.11.2009 19:46
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47
Как удалить текст до слова, потом от слова ? littlecoder Общие вопросы Delphi 7 29.12.2008 00:57
Поиск слова. Gon Паскаль, Turbo Pascal, PascalABC.NET 3 05.10.2008 17:14