École Supérieure de Technologie
et d’Informatique
A.U. 2011/2012
Programmation en langage C
Exercices corrigéssur les chaines de caractères (5 pages)
LA inf – LA SIL – LA ARS 1ère année
Exercice 1
(cid:1) Écrire un programme qui vérifie si une chaîne est un palindrome.
(cid:2) En utilisant le formalisme tableau
(cid:2) En utilisant le formalisme pointeur
#include<stdio.h>
#include<string.h>
int palindrome (char *ch)
{
int pal=1;
char *fin;
fin=ch+strlen(ch)-1;
printf("%c \n", *fin);
for( ; ch<fin && (pal==1); ch++, fin--)
if ( ch != fin ) pal=0;
return pal;
}
void main()
{
char ch[30];
int res;
puts("saisir une chaine");
gets(ch);
res= palindrome(ch);
if (res==1) printf("palindrome");
else printf (" non palindrome");
}
Exercice 2 :
Ecrire un programme qui lit une ligne de texte (ne dépassant pas 200 caractères) la mémorise dans
une variable TXT et affiche ensuite:
a) la longueur L de la chaîne.
b) le nombre de 'e' contenus dans le texte.
c) toute la phrase à rebours, sans changer le contenu de la variable TXT.
d) toute la phrase à rebours, après avoir inversé l'ordre des caractères dans TXT:
exemple :
saisir une chaine
azeet heem
Mme Wiem Yaiche Elleuch Exercices corrigés chaines de caractères
Publicité
Page 1
la taille de la chaine est 10
le nombre de e est 4
affichage a rebours sans changement
meeh teeza
affichage a rebours apres changement
meeh teeza
#include<stdio.h>
#include<string.h>
int nombre_e(char *ch)
{
char *p;
int nb_e=0;
do
{
p=strchr(ch,'e');
if(p!=NULL)
{
nb_e++;
ch=p+1;
}
}
while(p!=NULL);
return nb_e;
}
void afficher_rebours (char *ch)
{
char *p;
for (p=ch+strlen (ch)-1; p>=ch; p--)
printf("%c", *p);
}
void inverser(char *ch)
{
char debut, fin;
char aux;
for(debut=ch, fin=ch+strlen(ch)-1 ; debut<fin ; debut ++, fin--)
{
aux=*debut;
debut=fin;
*fin=aux;
}
Mme Wiem Yaiche Elleuch Exercices corrigés chaines de caractères
Page 2
Publicité
}
void main()
{
char ch[30];
int l, nb_e;
puts("saisir une chaine");
gets(ch);
l=strlen(ch);
printf("la taille de la chaine est %d \n",l);
nb_e= nombre_e(ch);
printf("le nombre de e est %d \n", nb_e);
printf("\n affichage a rebours sans changement \n");
afficher_rebours (ch);
printf("\n affichage a rebours apres changement \n");
inverser (ch);
puts(ch);
}
Exercice 3 :
Écrire un programme qui lit un texte ch (de moins de 200 caractères) et qui supprime toutes les
occurrences d’un caractère d’une chaine. Les modifications se feront dans la même variable ch.
Exemple :
saisir une chaine azeeer geeeek
saisir un caractere e
azr gk
#include<stdio.h>
#include<string.h>
void saisir_caractere (char * k)
{
printf("saisir un caractère ");
scanf("%c", k);
}
void supprimer (char *ch, char k)
{
char *p;
do
{
p=strchr(ch,k);
if(p) strcpy(p, p+1);
Mme Wiem Yaiche Elleuch Exercices corrigés chaines de caractères
Page 3
}
while (p);
}
Publicité
void main()
{
char ch[50], k;
printf("\n saisir une chaine ");
gets(ch);
saisir_caractere(&k);
supprimer (ch,k);
puts (ch);
}
Exercice 4 :
Écrire un programme qui lit un texte ch (de moins de 200 caractères) et qui remplacer une chaine par
une autre de même taille. Les modifications se feront dans la même variable ch.
Exemple
saisir une chaine bonjour bonjour
saisir mot1 jour
saisir mot2 de meme taille XXXX
bonXXXX bonXXXX
#include<stdio.h>
#include<string.h>
void modifier (char ch, char mot1, char *mot2)
{
char *p;
do
{
p=strstr(ch,mot1);
if(p) strncpy(p, mot2, strlen(mot1));
}
while (p);
}
void main()
{
char ch[50], mot1[20], mot2[20];
printf("\n saisir une chaine ");
gets(ch);
printf("\n saisir mot1 ");
gets(mot1);
printf("\n saisir mot2 de meme taille ");
gets(mot2);
modifier (ch,mot1, mot2);
puts (ch);
}
Mme Wiem Yaiche Elleuch Exercices corrigés chaines de caractères
Page 4
Publicité
Exercice 5 :
Écrire un programme qui lit un texte ch (de moins de 200 caractères) et qui remplace une chaine par
une autre de taille différente. Les modifications se feront dans la même variable ch.
Exemple
saisir une chaine bonjour bonjour
saisir mot1 jour
saisir mot2 de taille differente XXXXXX
bonXXXXXX bonXXXXXX
#include<stdio.h>
#include<string.h>
void modifier (char ch, char mot1, char *mot2)
{
char aide[20];
char *p;
do
{
p=strstr(ch,mot1);
if(p)
{
strcpy(aide, p+strlen(mot1));
strncpy(p, mot2, strlen(mot2));
strcpy(p+strlen(mot2), aide);
}
}
while (p);
}
void main()
{
char ch[50], mot1[20], mot2[20];
printf("\n saisir une chaine ");
gets(ch);
printf("\n saisir mot1 ");
gets(mot1);
printf("\n saisir mot2 de taille différente ");
gets(mot2);
modifier (ch,mot1, mot2);
puts (ch);
}
Mme Wiem Yaiche Elleuch Exercices corrigés chaines de caractères
Page 5