Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > V-симметричное слово


Автор: Koldun 22.4.2005, 17:41
Условие:
Найти максимум длины таких начальных отрезков заданного слова,которые имеют вид VV,где V-симметричное слово.
подскажите,что да как,а может,кто поможет текст проги написать?
есть примеры поиска симметрий через массив указателей
Код

char **F(char *p,int *&qq)
     {
     char *q;
     int ns=0;
     for(q=p; *q!=0; q++)          
     {
         for (int k=1; q-k>=p && q[-k]==q[k]; k++); //поиск симметричных фрагментов
         if (k>=3) ns++;                  //подсчёт симметричных фрагментов
                                      //для определения размерности ДМУ
         } 
     char **s=new char *[ns+1];       //создание ДМУ
     qq=new int[ns];                
     s[ns]=NULL;                     //ограничитель ДМУ
     int m=0;   
     for (q=p; *q!=0; q++) 
     {
         for (int k=1; q-k>=p && q[-k]==q[k]; k++);  
         if (k>=3)
        s[m]=q-k+1,                            
        qq[m++]=2*k-1;      
     
        }
     return s;     //возвратить указатель на ДМУ
    }

void main()         //вызов функции
    {
    char **qq;  
    int *ss;
    char *q="This is fragment */abcdedcba*/ and */bsfgfsb*/ and */xtpuptx*/";
    qq=F(q,ss);
    for (int i=0; qq[i]!=NULL; i++) 
    {
     //printf("%d:%s\n",ss[i],qq[i]);
    for (int j=0;j<ss[i];j++) putchar(qq[i][j]);
    puts("");
    }
    delete qq;
    delete ss;
   }


Добавлено @ 17:44
вот ещё
Код

char **F(char *p)
    {
    char *q;
    int ns=0;
    int k;
    for (q=p; *q!=0;q++)           
         {
         for(k=0;q[0]==q[k]; k++);
         if (k>=3) ns++,q+=k-1;
         } 
    char **s=new char *[ns+1];       //создание ДМУ
        s[ns]=NULL;                     //ограничитель ДМУ
    int m=0;   
    for (q=p; *q!=0;q++)           
        {
        for(k=0;q[0]==q[k]; k++);
        if (k>=3) s[m++]=q,q+=k-1;
        } 
    return s;     
    }
void main()         
    {
    char *q="is aaaaaaaddddddaaaaa ssssseeeezsssssqnd";
    char **qq=F(q);
    for (int i=0; qq[i]!=NULL; i++) 
        {
        for(int j=0;qq[i][0]==qq[i][j];j++) putchar(qq[i][j]);
        printf("\n");
        }
    delete qq;
    }

Автор: HELPER 22.4.2005, 18:14
А что такое V - семметричное слово?
Скажешь = помогу smile

Автор: Fire-Plug 23.4.2005, 04:45
Цитата(HELPER @ 22.4.2005, 18:14)
А что такое V - семметричное слово?

Поддерживаю предыд. вопрос.
А также задаю еще один: речь случайно не о полиндроме идет?

Автор: Koldun 23.4.2005, 14:31
HELPER
я узнаю в понедельник у препода и скажу.

Fire-Plug
что за полидром?

Автор: pablo 23.4.2005, 15:08
Полиндром - это слово, или слово сочитание, которое читается одинакого как слева на право, так и справо на лево.

Например: А роза упала на лапу азора.

Автор: Koldun 24.4.2005, 03:26
Fire-Plugнаверное тогда это и есть полидром

Автор: Koldun 1.5.2005, 11:07
HELPER
симметричное слово может быть таким abcddcba

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)