EXERCICE VI
Tableau dynamiques de chaînes de caractères
(TABLEAU DE POINTEURS)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define
L 30
#define
N 2
char * gets_li(char* s,int n) ;
int
te(char *s[]);
void
out(char *s[],int l);
void trier(char *list[],int l);
void main()
{ char
*t[L];
int l,i;
l=te(t);
printf("Le texte au debut\n");
out(t,l);
trier(t,l);
printf("Le texte apres le trie lexicographiquement\n");
out(t,l);
free (t);
}
//entrer une ligne de texte
char * gets_li(char*
s,int n)
{ char c,*p=s;
int
i=0;
fflush(stdin);
printf("Entrer des caracteres\n");
while(c=getchar(),c!='\n'&&c!=EOF)
{ if(i >= n)
{ n+=N;
s=(char *)realloc(s,n*sizeof(char));
if(s==NULL) exit(1);
}
s[i]=c;
i++;
}
s[i]='\0';
return s;
}
//entrer tout le texte
int te(char *s[])
{ int i=0,l;
char *buf=(char *)malloc(N*sizeof(char));
if(buf == NULL) exit(1);
while(1)
{
printf("li %d\n",i);
buf=gets_li(buf,N);
l=strlen(buf);
s[i]=(char
*)malloc(l+1);
if(s[i]==NULL)
{ printf("Pas
de place\n");
exit(1);
}
strcpy(s[i++],buf);
printf("Ligne suivante?:O/N:");
fflush(stdin);
if(toupper (getchar())=='N'||i==L)break;
}
free (buf); buf=NULL;
free (s);
return i;
}
//afficher le texte
void out(char *s[],int l)
{ int i;
for(i=0;i<l;i++)
puts(s[i]);
}
//trie le
texte
void trier(char *list[],int l)
{ int fin,courant;
for(fin=l-1;fin>0;fin--)
{ int modifie=0;
for(courant=0;courant<fin;courant++)
if(strcmp(list[courant],list[courant+1]) > 0)
{ char *temp=list[courant];
list[courant]=list[courant+1];
list[courant+1]=temp;
modifie=1;
}
if(!modifie)break;
}
}
2.
Modifier le programme de p.1 en
ajoutant une fonction à afficher la plus longue
lignes du texte.
3.
Modifier le programme de p.2 en
ajoutant une fonction à afficher toutes les lignes,
dont le premier mot est égal à un mot donné.
4.
Modifier le programme de p.3 en ajoutant la possibilité à échanger le contenu
de deux lignes du texte données par leurs numéros.