EXERCICE II
Pointeurs (chaînes de caractères)
1.
Ecrire la fonction nmots_ch qui retourne
comme résultat le nombre de mots contenus dans une chaîne de
caractères donnée ch.
Utiliser une variable logique, la fonction isspace et une variable
d'aide n.
·
Ecrire une fonction gets_li à
entrer une chaîne de caractères (nombre de caractères <=
62)
·
Utiliser ces fonctions à
trouver le nombre de mots dans une chaîne, entrée par
clavier.
#include <stdio.h>
#include <ctype.h>
#define MAX 62
void gets_li(char *s);
int nmots_ch(char *ch);
void main()
{ char ch[MAX];
printf("Entrer une
chaine.\n");
gets_li(ch);
printf("La chaine %s a %d
mots.\n",ch,nmots_ch(ch));
}
void gets_li(char *s)
{ char
c;
int i=0;
printf("Entrer des
caracteres\n");
while(c=getchar(),c!='\n'&&c!=EOF&&i<MAX-1)
{ *s++=c; i++; }
*s='\0';
}
int nmots_ch(char *ch)
{
/* Variables locales */
int n; /* nombre de mots */
int dans_mot; /* indicateur logique : */
/* vrai si ch pointe a l'interieur
d'un mot */
dans_mot=0;
for (n=0; *ch; ch++)
if
(isspace(*ch))
dans_mot=0;
else
if (!dans_mot)
{
dans_mot=1;
n++;
}
return n;
}
2.
Modifier le programme de p.1 en
ajoutant la fonction mot_ch qui retourne un pointeur sur
le n-ième
mot d'une chaîne ch s'il
existe, sinon un pointeur sur le symbole de fin de chaîne
3.
Modifier le programme de p.2 en
ajoutant
la fonction egal_n_ch qui retourne la valeur 1
si les n premiers caractères de ch1 et ch2 sont égaux, sinon la
valeur 0. (Si n est plus grand que la longueur de ch1 ou de ch2, le
résultat peut être 1 ou 0).
4.
Modifier le programme de p.3 en
ajoutant
la fonction cherche_ch. Utiliser la fonction egal_n_ch
et strlen.
cherche_ch
doit retourner un pointeur sur la première apparition de ch2 dans ch1,
sinon un pointeur sur le symbole de fin de chaîne.