Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Деление слов на слоги (С++) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача на масив!!! http://www.cyberforum.ru/cpp-beginners/thread88626.html
Есть числа А и В (А>B). Найти первый член последовательности аn(-1)^n(1+2..+1/n), n=1,2.. , который не неходится на .???
C++ Поправте код Помогите поправить код,до работоспособности.....Оч нужно... ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Реализация :... http://www.cyberforum.ru/cpp-beginners/thread88611.html
C++ классы непойму что с конструктором
привет вот создал такой класс но чето конструктор ругается но что непойму( #include <iostream> #include <string> using namespace std; const int N = 30; class per { private:
C++ четырёхзначное число
в чём ошибка написать программу являются ли все цифры четырёхзначного числа различнымию. при вводе числа делать проверку что введено четырёхзначное число. ввод вывод должен быть в цветном окне...
C++ Строки.Си http://www.cyberforum.ru/cpp-beginners/thread88576.html
Написать функцию, которая складывает одну строку с n символами другой строки не использовать strncat
C++ Реализовать ввод, вывод и простейшие операции с матрицами дана такая задача: Реализовать ввод, вывод и простейшие операции с матрицами (сложение, вычитание, умножение на число, умножение, транспонирование). Каждую операцию реализовать в виде функции.... подробнее

Показать сообщение отдельно
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
23.01.2010, 01:22
Спасибо, ребяты за вопрос
Было дело
В незапямятные времена придумал такую программку переноса (т.е. разбития по слогам)
Даю As Is
Там есть кой-какие непонятные конструкции (мои), но ежели кому надо - разберется!
Код
/****** grmxtd.c - грамматический перенос  08.12.92 ***/
#include "a.h"
#include "xtd.h"
 void *malc();
 static char LW[] = "аеиоуэюяыaeoui";
 asi word = 0;  /* 1 - не разбивать слова */
 static char *fr;

static perno(int a, int b);    /* Поиск возможного переноса в fr[a:b]         */
                /* Возвращает место возможного переноса или 0 */
/************************* Поиск гласной в fr[a,b]  *******/
static choilw(int a, int b);   /* Возвращает номер гласной или -1 */
/* ------------------ */
XTD *grmxtd(char *from, int nt)
{  int k, rw1, rw2, bw1, bw2, bp, nf, j, r1, r2, kf;
   XTD *x; char *to;   char frnt;
       /* r1 - разделитель до переноса              */
       /* r2 - разделитель после переносимого слова */
       /* rw1 - гласная до переноса                 */
       /* rw2 - гласная после переноса              */
       /* bw1 - есть ли гласная до переноса         */
       /* bw2 - есть ли гласная после переноса      */
       /* bp - анализ и пропуск пробела             */

  x = genxtd();
  if (nt<1) return(x);
  to = malc(nt+1);
  if (from==NULL) fr="";
  else fr = from;

a:  nf=strlen(fr);
    if (nf==0) {
       if (x->ns==0) asgxtd(x,fr);
       free(to);
       return(x);
    }
    bp = bw1 = bw2 = 0;
    memst(to, ' ', nt);
                   /* Символ '@' вызывает насильственный перенос */
  k=(nf>nt) ? nt+1 : nf;
  afc(j,k) {
     if (fr[j]=='@') {
	 memcpy(to,fr,j);
	 kf = j+1;
	 goto a2;
     }
  }
  if (nf<=nt) {  /* Все и так помещается  */
      kf = nf; goto a1; }

  frnt=fr[nt];
  if ( frnt==' ' || frnt=='(' ||
       (frnt=='"' && !isbu(fr[nt-1])) || nt < 3 ) { /* Естественная разбивка  */
                             	 kf=nt; bp=1; goto a1;  }

   for (r1=nt-1;r1>=0; r1--)
	if (isbu(fr[r1])==0) break;
          /* на выходе из этого цикла r1=номеру разделителя или -1  */

    if ( r1==nt-1  ||  r1==nt-2 )  /* Перенос по концу слова  */
	                    goto forc2;
    if (r1==nt-3)    {
	 if (fr[r1] !='(' && !(fr[r1]=='"' && !isbu(fr[r1-1])) || nt==3) r1++;
	 kf=r1;
	 goto a1;
    }
    if (word) goto forc;

   if ((rw1=choilw(r1+1,nt-2))>=0) bw1=1;
   if (!bw1) goto forc;            /* Нету гласных  */

   afcn(r2,nt,nf)       /* Поиск разделителя после слова  */
     if (isbu(fr[r2])==0) break;
                        /* Теперь слово ограничено r1 и r2  */

   afcn(j,r1+1,r2-1) /* Если в слове есть цифры - грубый перенос */
     if ('0'<=fr[j] && fr[j]<='9') goto forc;

   for (rw2=nt-1; rw2<r2; rw2++)  /* Поиск гласной за переносом */
     if (strchr(LW,tolow(fr[rw2]))!=NULL)   {  bw2=1;  break; }

                         /* Начальная попытка  */
   if (rw2==r2-1  && rw2==nt-1)
                k = perno(rw1,nt-3);
   else
       if (bw2) k = perno(rw1,nt-2);
       else k=0;
   while (k==0)  {     /* Пока перенос не найден  */
     if ((j=choilw(r1+1,rw1-1)) < 0 )
                   goto forc;  /* Гласные кончились - грубый перенос */
     rw2=rw1;  rw1=j;
     k = perno(rw1,rw2-1);
   }
		      /* нашли перенос после fr[k]   */
    kf = k+1;
    to[kf] = '-';
    goto a1;

forc:                     /* Грубый перенос  */
        if (r1<1) {
	     kf = nt;
	     goto a1;
        }

forc2:               /* Перенос по концу слова */
   kf=r1;
   if ( fr[r1] != '(' && !(fr[r1]=='"' && !isbu(fr[r1-1]))) kf++;
   bp=1;

a1:     memcpy(to,fr,kf);
        if (bp && fr[kf]==' ') kf++;

a2:	fr += kf;
	asgxtd(x,to);
	goto a;
}
/************************* Поиск гласной в fr[a,b]  *******/
static choilw(int a, int b)   /* Возвращает номер гласной или -1 */
{  int j;
      for(j=b; j>=a; j--)
	  if (strchr(LW, tolow(fr[j]))!=NULL) return(j);
      return(-1);   }
/*************************/
static perno(int a, int b)    /* Поиск возможного переноса в fr[a:b]         */
                /* Возвращает место возможного переноса или 0 */
{ int j; char s_1,s0,s1;
      for (j=b; j>=a; j--)  {  /* Изучение возможности переноса после j-того символа */
         s1=tolow(fr[j+1]);
                /* Чтоб Ь и Ъ не отрывались  */
	 if (s1=='ъ' || s1=='ь') continue;
                /* согласная - гласная : нехорошо */
         s0=fr[j];
	 if (strchr(LW,s1)!=NULL && strchr(LW,s0)==NULL
	      && strchr("ьъ",s0)==NULL) continue;
                /* гласная - Й : нехорошо  */
         if (strchr(LW,s0)!=NULL && s1=='й' ) continue;
		/* гласная гласная - : нехорошо  */
         s_1=tolow(fr[j-1]);
	 if (strchr(LW,s_1)!=NULL && strchr(LW,s0)!=NULL) continue;
                /*  ХХ- и -ХХ : нехорошо  */
         if (s0==s_1) continue;
	 if (fr[j+1]==fr[j+2]) continue;
                /* Чтоб одна буква не оставалась */
	 if (isbu(s_1)==0) return(0);
         return(j);
      }
      return (0);               }
/****************/
set_grm_word(int k)
{  int OldWord;

  OldWord = word;
  word = k;  
  return(OldWord);
}
/**************/
Возможно, это несколько больше, чем требуется,
но из большего меньшее ведь легче, чем наоборот
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru