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;
}
Feedback - Copyright © 1993,1996,1997 F.Faber