Vous êtes sur la page 1sur 6

Université Cadi Ayyad

Faculté des Sciences Semlalia Marrakech  


  Département d’Informatique

TP4- Programmation II
Module informatique SMI-S4
2020-2021
Les chaînes de caractères

Exercice 1

Écrire un programme déterminant le nombre de lettres « e »


(minuscules) présentes dans un texte de moins d’une ligne (supposée
ne pas dépasser 132 caractères) fourni au clavier
#include <stdio.h>
#include <string.h>
#define CAR 'e'
#define LGMAX 132
int main(){
char texte[LGMAX+1] ;
char *adr ;
int ncar ;
printf("Le nombre d'occurence de la lettre \"e\" dans un
texte \n\n") ;
printf("donnez un texte terminé par return\n") ;
gets(texte);
ncar = 0 ;
adr = texte ;
while( adr=strchr(adr,CAR)){
ncar++ ;
adr++ ;
}
printf ("votre texte comporte %d fois le caractère %c",
ncar, CAR) ;
return 0;
}

Exercice 2

Écrire un programme qui supprime toutes les lettres « e » (minuscules)


d’un texte de moins d’une ligne (supposée ne pas dépasser 132
caractères) fourni au clavier. Le texte ainsi modifié sera créé, en
mémoire, à la place de l’ancien
#include <stdio.h>
#include <string.h>
#define CAR 'e'
#define LGMAX 132
int main(){
char texte[LGMAX+1] ;
char *adr;
printf("élimination de la lettre \"e\" dans un texte
\n\n") ;
printf("donnez un texte terminé par return\n");
gets(texte);
adr = texte ;
while ( adr=strchr(adr,CAR) )
strcpy (adr, adr+1);
printf("voici votre texte privé des caractères %c\n",
CAR);
puts (texte) ;
return 0;
}

Exercice 3

Écrire une fonction qui compte le nombre d’occurrence d’un caractère


c dans un mot mot

a En utilisant un accumulateur dans la version itérative

#include <stdio.h>
#include <string.h>
#define LGMAX 50
int compte ( char c , char *s){
int i, cumul = 0;
for (i = 0; s[i] != '\0'; ++i){
if (s[i] == c)
++ cumul;
}
return cumul;
}
int main(){
int compte (char,char*);
char c;
int occ;
char mot[LGMAX+1] ;
printf("donnez un mot terminé par return\n");
gets(mot);
printf("donnez le caractere recherche dans le mot\n");
scanf("%c",&c);
occ=compte(c,mot);
printf("Le nombre d'occurence du caractères \"%c\" dans
votre mot est %d\n",c,occ);
return 0;
}

b En utilisant une fonction récursive

#include <stdio.h>
#include <string.h>
#define LGMAX 50
int compte2 ( char c , char * s){
if ( *s == '\0') /* soit s [0] == '\0 ' */
return 0;
if ( (* s == c ))
return 1 + compte2 (c,s +1);
return 0 + compte2 (c,s +1);
}
int main(){
int compte2(char,char*);
char c;
int occ;
char mot[LGMAX+1] ;
printf("donnez un mot terminé par return\n");
gets(mot);
printf("donnez le caractere recherche dans le mot\n");
scanf("%c",&c);
occ=compte2(c,mot);
printf("Le nombre d'occurence du caractères %c dans
votre mot est %d\n",c,occ);
return 0;
}

Exercice 4

Écrire une fonction qui recherche dans une chaîne chaque caractère c
pour le remplacer par un caractère r et retourne l'adresse de la chaîne.
Prototype : char *cherche_remplace(char c, char r, char *s);
#include <stdio.h>
#include <string.h>
#define LGMAX 150
char *cherche_remplace(char c ,char r,char *s){
int i;
for (i=0;i<=strlen(s); ++i){
if (s[i] == c)
s[i]= r;
}
return s;
}
int main(){
char *cherche_remplace(char,char,char*);
char caracterCherche,caracterRemplassement;
char text[LGMAX+1];
char *textmodifie ;
printf("donnez un texte terminé par return\n");
gets(text);
printf("donnez le caractere recherche dans le texte\n");
scanf("%c",&caracterCherche);
printf("donnez le caractere de remplacement\n");
scanf("%s",&caracterRemplassement);
textmodifie=cherche_remplace(caracterCherche,
caracterRemplassement,text);
printf("Le texte apres le remplacement du caractères %c
par \ le caractères %c est:\n", caracterCherche,
caracterRemplassement);
puts(textmodifie);
return 0;
}

Exercice 5

Ecrire un programme qui lit 10 mots et les mémorise dans un tableau


de chaînes de caractères.
a Trier les 10 mots lexicographiquement en utilisant les
fonctions strcmp et strcpy.
b Afficher le tableau trié
#include<stdio.h>
#include<string.h>
int main()
{
/* Déclarations */
int n=10;
char MOT[n][50]; /* tableau de 10 mots à trier */
char AIDE[50]; /* chaîned'aide pour la permutation */
int I; /* rang à partir du quel MOT n'est pas trié */
int J; /* indice courant */
int PMOT; /* indique la position du prochain mot dans la
suite lexicographique */
/* Saisie des données */
printf("Veuillez saisir %d elements du tableau \n", n);
for (J=0; J<n; J++)
{
printf("Mot %d : ", J);
gets(MOT[J]); /* ou : scanf ("%s\n", MOT[J]); */
}
/* Tri du tableau par sélection directe du prochain mot
dans la suite lexicographique */
for (I=0; I<n-1; I++)
{
/* Recherche du prochain mot à droite de A[I] */
PMOT=I;
for (J=I+1; J<n; J++)
if (strcmp(MOT[J], MOT[PMOT]) < 0)
PMOT=J;
/* Echange des mots à l'aide de strcpy */
strcpy(AIDE, MOT[I]);
strcpy(MOT[I], MOT[PMOT]);
strcpy(MOT[PMOT], AIDE);
}
/* Edition du résultat */
printf("Tableau trié lexicographiquement :\n");
for (J=0; J<n; J++)
puts(MOT[J]); /* ou : printf("%s\n",MOT[J]); */
printf("\n");
return 0;
}

Exercice 6

Ecrire un programme qui lit une chaîne de caractères CH au clavier et


qui compte les occurrences des lettres de l'alphabet en ne distinguant
pas les majuscules et les minuscules. Utiliser un tableau ABC de
dimension 26 pour mémoriser le résultat et un pointeur PCH pour
parcourir la chaîne CH et un pointeur PABC pour parcourir ABC.
Afficher seulement le nombre des lettres qui apparaissent au mois une
fois dans le texte.
Exemple:
Entrez un ligne de texte (max. 100 caractères) :
Jeanne
La chaîne "Jeanne" contient :
1 fois la lettre 'A'
2 fois la lettre 'E'
1 fois la lettre 'J'
3 fois la lettre 'N'
#include<stdio.h>
int main()
{
/* Déclarations */
char CH[101]; /* chaîne donnée */
char *PCH; /* pointeur d'aide dans CH */
int ABC[26]; /* compteurs des différents caractères */
int *PABC; /* pointeur d'aide dans ABC */
/* Saisie des données */
printf("Entrez une ligne de texte (max.100
caractères):\n");
scanf("%[^\n]%*c", CH);//gets(CH);
/* Initialiser le tableau ABC */
for (PABC=ABC; PABC<ABC+26; PABC++)
*PABC=0; /* Compter les lettres */
for (PCH=CH; *PCH; PCH++){
if (*PCH>='A' && *PCH<='Z')
(*(ABC+(*PCH-'A')))++; /* Attention aux parenthèses!
*/
if (*PCH>='a' && *PCH<='z')
(*(ABC+(*PCH-'a')))++;
}
/* Affichage des résultats */
/* (PABC-ABC) est le numéro de la lettre de l'alphabet.*/
printf("La chaîne \"%s\" contient :\n", CH);
for (PABC=ABC; PABC<ABC+26; PABC++)
if (*PABC)
printf(" %d\t fois la lettre '%c' \n", *PABC,
'A'+(PABC-ABC));
return 0;
}

Vous aimerez peut-être aussi