SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
Exercices corrigés : chaines de caractères et les pointeurs en langage C

Exercice 1 :
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2 au clavier et supprime la
première occurrence de CH2 dans CH1. Utiliser uniquement des pointeurs, une variable
logique TROUVE et la fonction strcpy.



Solution :
#include <stdio.h>
#include <string.h>
 main()
{
 /* Déclarations */
 char CH1[101], CH2[101]; /* chaînes données */
 char *P1, *P2; /* pointeurs d'aide dans CH1 et CH2 */
 int TROUVE; /* indicateur logique: vrai, si le caractère */
         /* actuel dans CH1 a été trouvé dans CH2. */

/* Saisie des données */
printf("Entrez la chaîne à transformer"
       " (max.100 caractères) :n");
gets(CH1);
printf("Entrez la chaîne à supprimer "
       " (max.100 caractères) :n");
gets(CH2);
/* Rechercher CH2 dans CH1 : */
/* L'expression P2-CH2 est utilisée pour déterminer l'indice */
/* de P2 dans CH2. On pourrait aussi résoudre le problème à */
/* l'aide d'un troisième pointeur P3 parcourant CH1. */
TROUVE=0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
    {
     for (P2=CH2 ; *P2 == *(P1+(P2-CH2)) ; P2++)
         ;
     if (!*P2)
         TROUVE = 1;
    }

/* A la fin de la boucle, P1 est incrémenté, donc */
P1--;
/* Si CH2 se trouve dans CH1, alors P1 indique la position */
/* de la première occurence de CH2 dans CH1 et P2 pointe à */
/* la fin de CH2. (P2-CH2) est alors la longueur de CH2. */
if (TROUVE)
    strcpy(P1, P1+(P2-CH2));

/* Affichage du résultat */
printf("Chaîne résultat : "%s" n", CH1);
return 0;
}

Exercice 2 :
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'


Solution :
#include <stdio.h>
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");
 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(" %dtfois la lettre '%c' n",
                             *PABC, 'A'+(PABC-ABC));
  return 0;
}
Exercice 3:
Ecrire un programme qui lit 5 mots d'une longueur maximale de 50 caractères et les
mémorise dans un tableau de chaînes de caractères TABCH. Inverser l'ordre des
caractères à l'intérieur des 5 mots à l'aide de deux pointeurs P1 et P2. Afficher les
mots.


Solution :
#include <stdio.h>
main()
{
 /* Déclarations */
 char TABCH[5][51];/* tableau de chaînes de caractères */
 char AIDE;        /* pour la permutation des caractères */
 char *P1, *P2; /* pointeurs d'aide */
 int I;       /* indice courant */

/* TABCH+I est l'adresse de la I-ième chaîne du tableau */
/* Il vaut mieux convertir TABCH+I en pointeur sur char */
 /* Saisie des données */
printf("Entrez 5 mots :n");
for (I=0; I<5; I++)
    {
     printf("Mot %d (max.50 caractères) : ", I);
     gets((char *)(TABCH+I));
    }

/* Inverser l'ordre des caractères à l'intérieur des mots */
for (I=0; I<5; I++)
    {
     P1 = P2 = (char *)(TABCH+I);
     /* Placer P2 à la fin de la chaîne */
     while (*P2)
           P2++;
     P2--; /* sinon '0' est placé au début de la chaîne */
     while (P1<P2)
         {
          AIDE = *P1;
          *P1 = *P2;
          *P2 = AIDE;
          P1++;
          P2--;
         }
    }

 /* Affichage des mots inversés */
for (I=0; I<5; I++)
    puts((char *)(TABCH+I));
return 0;
}

Mais conteúdo relacionado

Mais procurados

Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementborhen boukthir
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)DriNox NordisTe
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage Ccoursuniv
 
Exercices pascal fenni_2018
Exercices pascal fenni_2018Exercices pascal fenni_2018
Exercices pascal fenni_2018salah fenni
 
Return Type Declaration
Return Type DeclarationReturn Type Declaration
Return Type DeclarationDarkmira
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesYann Caron
 
Théorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genThéorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genYann Caron
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)abdellah12
 
Fiche1 ex-sous-programme
Fiche1 ex-sous-programmeFiche1 ex-sous-programme
Fiche1 ex-sous-programmeBaghdadi Wajih
 
09 big data mapreduce
09 big data mapreduce09 big data mapreduce
09 big data mapreducePatrick Bury
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetiquemohamed_SAYARI
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 

Mais procurados (19)

Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrement
 
C++11
C++11C++11
C++11
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
Exercices pascal fenni_2018
Exercices pascal fenni_2018Exercices pascal fenni_2018
Exercices pascal fenni_2018
 
Return Type Declaration
Return Type DeclarationReturn Type Declaration
Return Type Declaration
 
Theme 6
Theme 6Theme 6
Theme 6
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmes
 
Théorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genThéorie des langages - 02 - Code gen
Théorie des langages - 02 - Code gen
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
 
Fiche1 ex-sous-programme
Fiche1 ex-sous-programmeFiche1 ex-sous-programme
Fiche1 ex-sous-programme
 
09 big data mapreduce
09 big data mapreduce09 big data mapreduce
09 big data mapreduce
 
Résumé javascript
Résumé javascriptRésumé javascript
Résumé javascript
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetique
 
Le langage C
Le langage CLe langage C
Le langage C
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Theme2
Theme2Theme2
Theme2
 

Destaque

Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)
Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)
Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)Jc Freund
 
Ag21022013 pv
Ag21022013 pvAg21022013 pv
Ag21022013 pvjlpel
 
Google sites url
Google sites url Google sites url
Google sites url leticia769
 
Sqlalchemy declaratif
Sqlalchemy declaratifSqlalchemy declaratif
Sqlalchemy declaratifAffinitic
 
Develconf coffeescript
Develconf coffeescriptDevelconf coffeescript
Develconf coffeescriptMartin Maly
 

Destaque (8)

Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)
Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)
Twitter / CCI Sud Alsace - 31 octobre 2014 - Jean-Christophe ANNA (Link Humans)
 
Google sites
Google sites Google sites
Google sites
 
Ag21022013 pv
Ag21022013 pvAg21022013 pv
Ag21022013 pv
 
Google sites url
Google sites url Google sites url
Google sites url
 
Sqlalchemy declaratif
Sqlalchemy declaratifSqlalchemy declaratif
Sqlalchemy declaratif
 
Manual Uniminuto
Manual UniminutoManual Uniminuto
Manual Uniminuto
 
Industria
IndustriaIndustria
Industria
 
Develconf coffeescript
Develconf coffeescriptDevelconf coffeescript
Develconf coffeescript
 

Semelhante a Poit

ch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdfch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdfFadouaBouafifSamoud
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2moisko
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage CFahad Golra
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdfsalah fenni
 
09 big data mapreduce
09 big data mapreduce09 big data mapreduce
09 big data mapreducePatrick Bury
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CAbdelouahed Abdou
 
Cours c#
Cours c#Cours c#
Cours c#zan
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage cEbrima NJIE
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage ccoursuniv
 

Semelhante a Poit (20)

1763685
17636851763685
1763685
 
ch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdfch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdf
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
Chapitre1
Chapitre1Chapitre1
Chapitre1
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage C
 
chapitre1.ppt
chapitre1.pptchapitre1.ppt
chapitre1.ppt
 
5e8a000b9840a.pdf
5e8a000b9840a.pdf5e8a000b9840a.pdf
5e8a000b9840a.pdf
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
09 big data mapreduce
09 big data mapreduce09 big data mapreduce
09 big data mapreduce
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
Cours c#
Cours c#Cours c#
Cours c#
 
Language-C.ppt
Language-C.pptLanguage-C.ppt
Language-C.ppt
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Pointeuren c
Pointeuren cPointeuren c
Pointeuren c
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage c
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
 

Poit

  • 1. Exercices corrigés : chaines de caractères et les pointeurs en langage C Exercice 1 : Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2 au clavier et supprime la première occurrence de CH2 dans CH1. Utiliser uniquement des pointeurs, une variable logique TROUVE et la fonction strcpy. Solution : #include <stdio.h> #include <string.h> main() { /* Déclarations */ char CH1[101], CH2[101]; /* chaînes données */ char *P1, *P2; /* pointeurs d'aide dans CH1 et CH2 */ int TROUVE; /* indicateur logique: vrai, si le caractère */ /* actuel dans CH1 a été trouvé dans CH2. */ /* Saisie des données */ printf("Entrez la chaîne à transformer" " (max.100 caractères) :n"); gets(CH1); printf("Entrez la chaîne à supprimer " " (max.100 caractères) :n"); gets(CH2); /* Rechercher CH2 dans CH1 : */ /* L'expression P2-CH2 est utilisée pour déterminer l'indice */ /* de P2 dans CH2. On pourrait aussi résoudre le problème à */ /* l'aide d'un troisième pointeur P3 parcourant CH1. */ TROUVE=0; for (P1=CH1 ; *P1 && !TROUVE ; P1++) { for (P2=CH2 ; *P2 == *(P1+(P2-CH2)) ; P2++) ; if (!*P2) TROUVE = 1; } /* A la fin de la boucle, P1 est incrémenté, donc */ P1--; /* Si CH2 se trouve dans CH1, alors P1 indique la position */ /* de la première occurence de CH2 dans CH1 et P2 pointe à */ /* la fin de CH2. (P2-CH2) est alors la longueur de CH2. */ if (TROUVE) strcpy(P1, P1+(P2-CH2)); /* Affichage du résultat */ printf("Chaîne résultat : "%s" n", CH1);
  • 2. return 0; } Exercice 2 : 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' Solution : #include <stdio.h> 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"); 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(" %dtfois la lettre '%c' n", *PABC, 'A'+(PABC-ABC)); return 0; }
  • 3. Exercice 3: Ecrire un programme qui lit 5 mots d'une longueur maximale de 50 caractères et les mémorise dans un tableau de chaînes de caractères TABCH. Inverser l'ordre des caractères à l'intérieur des 5 mots à l'aide de deux pointeurs P1 et P2. Afficher les mots. Solution : #include <stdio.h> main() { /* Déclarations */ char TABCH[5][51];/* tableau de chaînes de caractères */ char AIDE; /* pour la permutation des caractères */ char *P1, *P2; /* pointeurs d'aide */ int I; /* indice courant */ /* TABCH+I est l'adresse de la I-ième chaîne du tableau */ /* Il vaut mieux convertir TABCH+I en pointeur sur char */ /* Saisie des données */ printf("Entrez 5 mots :n"); for (I=0; I<5; I++) { printf("Mot %d (max.50 caractères) : ", I); gets((char *)(TABCH+I)); } /* Inverser l'ordre des caractères à l'intérieur des mots */ for (I=0; I<5; I++) { P1 = P2 = (char *)(TABCH+I); /* Placer P2 à la fin de la chaîne */ while (*P2) P2++; P2--; /* sinon '0' est placé au début de la chaîne */ while (P1<P2) { AIDE = *P1; *P1 = *P2; *P2 = AIDE; P1++; P2--; } } /* Affichage des mots inversés */ for (I=0; I<5; I++) puts((char *)(TABCH+I)); return 0;
  • 4. }