home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / alb_c10 / chap_10 / ch10_11.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-28  |  1.7 KB  |  68 lines

  1. /*********************************************************************
  2. *  CH10_11.C                    Trier des chaεnes de mΩme longueur *
  3. *                    avec un tableau de pointeurs *
  4. *********************************************************************/
  5. #include<stdio.h>
  6. #include<alloc.h>
  7. #include<string.h>
  8.  
  9. #define dim 40
  10. #define nb_chaines 10
  11.  
  12. void LitChaine( char*, int);
  13. void TrierChaines( int, char *t[]);
  14.  
  15. main( void)
  16. {
  17.      int i, n= -1;
  18.      char *t[nb_chaines];
  19.  
  20.      printf(" Saisie de chaεnes de moins de %d caractΦres.\n\t"
  21.             " Composez le mot fin pour sortir.\n\n", dim);
  22.     do
  23.     { 
  24.        if(++n> nb_chaines- 1) break;
  25.                        /* allocation de mΘmoire */
  26.        t[n]= ( char*) malloc( dim* sizeof( char) );          
  27.  
  28.        printf("\n chaεne n░ %d:  ", n+ 1);
  29.        LitChaine( t[n], dim);
  30.     }
  31.     while( strcmp( t[n], "fin") );
  32.  
  33.            TrierChaines( n, t);             /* opΘration de tri */
  34.  
  35.     printf("\n\n Liste des chaεnes triΘes : \n");
  36.     for( i= 0; i< n; i++)
  37.      {
  38.        printf("\n chaεne n░ %d:  %s", i+ 1, t[i]);
  39.        free( t[i]);   /* libΘration de la mΘmoire allouΘe       */
  40.          }
  41. }
  42.  
  43. void TrierChaines( int n0, char *t0[])
  44. {
  45.     int i, j;
  46.     char *t1;              
  47.  
  48.     for( i= 0; i< n0- 1; ++i)
  49.        for( j= i+ 1; j< n0; ++j)
  50.           if( strlen( t0[i])> strlen(t0[j]) )
  51.         {
  52.               t1= t0[i];
  53.               t0[i]= t0[j];
  54.               t0[j]= t1;
  55.         }
  56. }
  57.  
  58. void LitChaine( char *chaine0, int dim_chaine0)
  59. {
  60.     char *chaine1= ( char*) malloc( 2* 256);
  61.     *(chaine0+ dim_chaine0- 1)='\0';
  62.     while( scanf("%255[^\n]", chaine1)!= 1)
  63.         while( getchar() != '\n');
  64.        while( getchar() != '\n');              
  65.     strncpy( chaine0, chaine1, dim_chaine0- 1);
  66.     free( chaine1);  
  67. }
  68.