Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Les chaines de caractères

Les chaines de caractères

Les chaines de caractères

Boughida Adil

April 23, 2022
Tweet

More Decks by Boughida Adil

Other Decks in Science

Transcript

  1. Les chaînes de caractères Le type « chaîne » n’existe

    pas en langage C. En langage C: Une chaîne de caractères est un tableau d’élément de type char. Dont le dernier élément est le caractère nul ‘\0’.  Ce caractère n’est pas affichable.  Il indique la fin de la chaîne de caractères. Exemple: La chaîne "Bonjour" est représentée par : B o n j o u r \0 Les chaînes de caractères 1
  2. Comment déclarer une chaîne de caractères On déclare un tableau

    de caractères. De taille LongeurChaine + 1 (réservation de place en mémoire) char Nom_du_tableau[Nombre_elements + 1] ; On peut mettre une taille max (ex: 200). La chaîne se terminera au ‘\0’. (on aura réserver de la place pour rien) Exemples B o n j o u r \0 Les chaînes de caractères 2 char mot [ 50 + 1] ; char phrase [ 250 ] ;
  3. Initialisation d’une chaîne Caractère par caractère Les chaînes de caractères

    3 char mot [3 +1 ]; //déclaration //Initialisation mot [0] =‘a’; mot [1] =‘i’; mot [2] =‘e’; mot [3] =‘\0’; A la déclaration //comme un tableau char phrase [200] = { 'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0' }; // spécifique aux chaîne de caractères // le caractère de fin de chaîne '\0' est géré automatiquement char phrase [200] = "Bonjour" ; // On a réservé de la place pour rien. On a besoin de seulement d’un tableau de longueur 8 (7 pour "Bonjour" + caractère null ‘/0’)
  4. Initialisation d’une chaîne Les chaînes de caractères 4 A la

    déclaration // On peut ne pas attribuer la taille de tableau lors de l’initialisation. // La taille du tableau sera égale à la longueur de la chaine de caractères // + le caractère null \0 qui sera ajouté à la fin du tableau automatiquement. char phrase [] = { 'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0' }; char phrase [] = "Bonjour" ;
  5. Initialisation d’une chaîne Exemple Les chaînes de caractères 5 char

    MonMot [4 + 1] ; // réservation de place en mémoire MonMot [0] = ‘M’; //initialisation caractère par caractère MonMot [1] = ‘i’; MonMot [2] = ‘a’; MonMot [3] = ‘m’; MonMot [4] = ‘\0’; // Déclaration + initialisation // initialisation comme un tableau classique char MonMot [4 + 1] = { ‘M’, ‘i’, ‘a’, ‘m’, ‘\0’ } ; // Déclaration + initialisation //Spécifique aux chaînes de caractères char MonMot [4 + 1] = "Miam" ; // le ‘\0’ est rajouté automatiquement
  6. Caractères spéciaux \0 caractère de fin de chaîne (NULL) \"

    guillemet \\ barre oblique. \n retour à la ligne Les chaînes de caractères 6 cout<<"PinPon"; cout<<"Pin\0Pon"; cout<<"Pin\\Pon"; cout<<"Pin\nPon"; > PinPon > Pin > Pin\Pon > Pin Pon
  7. Exemple Les chaînes de caractères 7 int LongueurChaine( char ch[

    ] ); // Déclaration de la fonction LongueurChaine int main() { char chaine[255] = "Bonjour"; int longueur = LongueurChaine(chaine); cout<<longueur<<endl; // Le programme affiche 7 } /* Définition de la fonction LongueurChaine. */ int LongueurChaine( char ch[ ] ) { int i = 0; while ( ch[i] != ‘\0’) // on parcours la chaîne jusqu’à arriver au caractère ‘\0’ i++; return i; }
  8. Restriction On ne peut pas affecter une chaîne en dehors

    de la déclaration. On ne peut pas affecter une chaîne à une autre. On ne peut pas comparer deux chaînes . Les chaînes de caractères 8 char mot[8] = "bonjour"; // OK char mot[8] ; mot = "bonjour"; // ERREUR char mot1[8] ; char mot2[8] ; // déclaration de deux chaînes … mot1 = mot2; // ERREUR char mot1[8] , char mot2[8] ;// déclaration de deux chaînes … if(mot1 == mot2) // ERREUR
  9. Lecture d’une chaine de caractères En utilisant scanf()  Utiliser

    la spécification de champ %s dans scanf pour lire la chaîne  Lire les caractères jusqu'au prochain espace blanc rencontré  Le language C stocke le caractère nul (\0) après le dernier caractère d'espace non blanc Les chaînes de caractères 9
  10. Exemple Les chaînes de caractères 10 int main() { //

    on lire une chaine de caractère* dans le variable name printf(“Lire votre nom et prénom: ”); char name[14]; scanf(“%s”, &name); printf(“Votre nom et prénom: %s”, name); } > Lire votre nom et prénom: Adel Boughida Votre nom et prénom: Adel Problème: scanf() permet de lire seulement les caractères avant le premier espace rencontré Solution: utiliser gets()
  11. Lecture d’une chaine de caractères En utilisant gets() L'inconvénient de

    la lecture d'une chaîne à l'aide de scanf() est qu'elle ne lit pas les espaces. • Si la chaîne à lire en tant qu'entrée contient des caractères d'espace blanc intégrés, utilisez la fonction standard gets(). Les chaînes de caractères 11
  12. Exemple Les chaînes de caractères 12 int main() { //

    on lire une chaine de caractère* dans le variable name avec gets printf(“Lire une chaine SVP: ”); char chaine[10]; gets(chaine); printf(“La chaine: %s”, chaine); } > Lire une chaine SVP: Math info La chaine: Math info Problème: scanf() permet de lire seulement les caractères avant le premier espace rencontré Solution: utiliser gets()
  13. Ecriture d’une chaine de caractères En utilisant printf() Utilisez la

    spécification de champ %s dans printf pour écrire une chaine de caractères. les caractères de la chaîne qui sont imprimées sont jusqu'à \0 En utilisant puts() L'inconvénient de l'impression d'une chaîne à l'aide de printf() est qu'elle n'imprime pas d'espaces blancs. • Si la chaîne à imprimer en tant que sortie contient des caractères d'espacement intégrés, utilisez la fonction standard puts(). Les chaînes de caractères 13
  14. Exemple Les chaînes de caractères 14 int main() { //

    on déclare 2 chaînes char nom[5] = "Adel"; printf("|%s|", nom); //affiche |Adel| char nom2[14] = "Adel Boughida"; printf("%s", nom2); //affiche Adel puts(nom2); //affiche Adel Boughida } |Adel| Adel Adel Boughida
  15. Fonctions de la bibliothèque standard Fonctions de manipulation de chaînes

    de caractères. (définies dans string.h). strlen(char chaine[ ]) Retourne la longueur de la chaîne chaine. strcpy(char chaineDest[], char chaineSource[]) Copie la chaîne chaineSource dans chaineDest. Les chaînes de caractères 15
  16. Fonctions de la bibliothèque standard strcmp ( char chaine1[] ,

    char chaine2[]) Retourne 0 si les deux chaînes sont identiques. strcat (char chaineDest[] , char chaineSource[] ) Recopie la chaine chaineSource à la suite de chaineDest. Strnset (char chaine [], char c, int n)  Elle remplace les n premiers caractères d'une chaîne par un caractère donné c. Si n est supérieur à la longueur de la chaîne, la longueur de la chaîne est utilisée à la place de n. Les chaînes de caractères 16
  17. Exemple Les chaînes de caractères 17 int main() { //

    on déclare 2 chaînes char chaine1[20] = "bonjour"; char chaine2[20]; // L’utilisateur rentre chaine2 printf("Ecrivez votre nom"); scanf("%s", &chaine2); //on ajoute un espace à chaine1 strcat(chaine1," "); //on ajoute chaine2 à chaine1 strcat(chaine1,chaine2); printf("%s", chaine1); } > Ecrivez votre nom Adel > bonjour Adel Strcat()
  18. Exemple Les chaînes de caractères 18 int main() { //

    on déclare 2 chaînes char chaine1[20] = "bonjour"; char chaine2[20]; // On copie le contenu de chaine1 dans chaine2 strcpy(chaine2, chaine1); printf("%s", chaine2); // On compare si les deux chaines // sont identique if(strcmp(str, str2) == 0) { printf("les deux chaines sont identiques"); } } bonjour les deux chaines sont identiques Strcmp() and strcpy()
  19. Exemple Les chaînes de caractères 19 int main() { //

    on déclare une chaîne char chaine1[20] = "bonjour"; int longueur; // Calcul de longueur de la chaine1 longueur = strlen(chaine1); printf(" La longueur de la chaine égale à %d", longueur); } La longueur de la chaine égale à 7 Strlen()