Previous Next Up Index Contents

Exercice 9.22

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
 /* Déclarations */
 char INTRO[51];/* chaîne pour l'introduction des données */
 char *MOT[10]; /* Tableau de pointeurs sur les 10 chaînes */
 char *PHRASE;  /* Pointeur cible */
 int MAX;       /* indice du prochain candidat à copier */
  int I,J;       /* indices courants */
 int L;         /* Longueur de la phrase */

 /* Saisie des données et allocation dynamique de mémoire */
 puts("Introduire 10 phrases terminées chaque fois"
      " par un retour à la ligne :");
 for (I=0; I<10; I++)
     {
      /* Lecture d'une phrase */
      printf("Phrase %d : ",I);
      gets(INTRO);
      /* Réservation de la mémoire */
      MOT[I] = malloc(strlen(INTRO)+1);
      if (MOT[I])
           strcpy(MOT[I], INTRO);
      else
          {
           printf("\aPas assez de mémoire \n");
           exit(-1);
          }
      }
 /* Calcul de la longueur totale de la 'phrase' */
 L=11; /* pour les espaces et le symbole de fin de chaîne */
 for (I=0; I<10; I++)
      L += (strlen(MOT[I])+1);
 /* Réservation de la mémoire pour la 'phrase' */
 PHRASE = malloc(L);
 if (!PHRASE)
     {
      printf("\aPas assez de mémoire pour"
             " mémoriser la phrase.\n");
      exit(-1);
     }
 /* Initialisation de la PHRASE */
 PHRASE[0]='\0';
 /* Copier et supprimer les mots du tableau par */
 /* ordre lexicographique */
 for (I=0; I<10; I++)
     {
      /* Recherche de la dernière chaîne dans l'ordre   */
      /* lexicographique : Initialiser d'abord MAX avec */
      /* l'indice d'une chaîne encore existante. */
      for (MAX=0 ; !MOT[MAX] ; MAX++)   ;
      for (J=MAX; J<10; J++)
           if (MOT[J] && strcmp(MOT[MAX], MOT[J])>0)
               MAX=J;
      /* Copier la chaîne dans la PHRASE */
      strcat(PHRASE,MOT[MAX]);
      strcat(PHRASE," ");
      /* Suppression de la chaîne */
      free(MOT[MAX]);
      MOT[MAX]=0;
     }
  /* Affichage de la PHRASE */
 puts("Résultat :");
 puts(PHRASE);
 return 0;
}


Previous Next Up Index Contents

Feedback - Copyright © 1993,1996,1997 F.Faber