编程-最大回文字符串

代码
  1  #include  < stdio.h >  
  2  #include < string .h >
  3  #define  MAXLENGTH 100
  4  /*
  5   *str原始字符串 out返回最大回文字符串
  6    */
  7  void  heiwenTest( char   * str, char   * out )
  8  {
  9       char   * head; // 字符串头指针,用于从尾部向前搜索
 10       char   * tail; // 字符串尾指针,用于从头部向后搜索    
 11       char   * last; // 指向最后一个字符
 12       if ( 1 == strlen(str))
 13      {
 14          strcpy( out ,str);
 15      }
 16       else
 17      {
 18          heiwenTest(str + 1 , out );
 19      }
 20 
 21      tail = str + strlen(str) - 1 ;
 22      last = tail;
 23      head = str;
 24      
 25       while (last > str)
 26      {
 27           while (head < tail  &&   * head ==* tail)
 28          {
 29              head ++ ;
 30              tail -- ;
 31          }
 32           if (head == tail)
 33          {
 34 
 35               if (strlen( out ) < ((head - str) * 2 + 1 ))
 36              {
 37                   for ( int  i = 0 ;i < ((head - str) * 2 + 1 );i ++ )
 38                  {
 39                       out [i] =* (str + i);
 40                  }
 41                   out [i] = ' \0 ' ;
 42              }
 43 
 44          }
 45           if (head > tail)
 46          {
 47               if (strlen( out ) < ((head - str) * 2 ))
 48              {
 49                   for ( int  i = 0 ;i < ((head - str) * 2 );i ++ )
 50                  {
 51                       out [i] =* (str + i);
 52                  }
 53                   out [i] = ' \0 ' ;
 54              }
 55          }
 56          last -- ; // 搜索字符串减一
 57          tail = last;
 58          head = str;
 59      }
 60  }
 61  /*
 62  此函数返回最大回文字符串长度
 63  int heiwenTest(char *str)
 64  {
 65      int max=0;
 66      char *tail=str;
 67      char *head;
 68      char *last;
 69      if(1==strlen(str))
 70      {
 71          return 1;
 72      }
 73      else
 74      {
 75          max=heiwenTest(str+1);
 76      }
 77      tail=str+strlen(str)-1;
 78      last=tail;
 79      head=str;
 80      
 81      while(last>str)
 82      {
 83          while(head<tail && *head==*tail)
 84          {
 85              head++;
 86              tail--;
 87          }
 88          if(head==tail)
 89          {
 90              max=max>((head-str)*2+1)?max:((head-str)*2+1);
 91 
 92          }
 93          if(head>tail)
 94          {
 95              max=max>((head-str)*2)?max:((head-str)*2);
 96          }
 97          last--;
 98          tail=last;
 99          head=str;
100      }
101      return max;
102  }
103  */
104  main()
105  {
106         char   * p = " abcdcba " ;
107         char   out [MAXLENGTH];
108         for ( int  i = 0 ;i < MAXLENGTH;i ++ )
109        {
110             out [i] = ' \0 ' ;
111        }
112        printf( " 原串:%s\n " ,p);
113        heiwenTest(p, out );
114        printf( " 最大回文子串:%s\n " , out );
115  }

 

你可能感兴趣的:(字符串)