|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.12.2009, 20:56 | #1 |
Новичок
Джуниор
Регистрация: 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. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск слова | 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 |