Annonce

Réduire
Aucune annonce.

Cours langage C n°2 - Les chaînes de caractères

Réduire
Ceci est une discussion importante.
X
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Cours langage C n°2 - Les chaînes de caractères

    LES CHAÎNES DE CARACTÈRES

    Les chaînes de caractères en C est un cours pas évident. En général ce genre de cours s'explique au centre d'un bouquin car des difficultés interviennent (mémoire, pointeurs, ...), mais je me vois pas expliquer le C sans taper du texte dans nos code.

    Mémoire? Pointeurs? On s'en fou dans ce cours, tout cela n'interviendra pas, je vais simplifier au maximum. Vous verrez que l'on peut expliquer des choses complexes en faisant simple.

    Rappel

    Souvenez-vous du tableau des types cours n°1...

    tableau_types.gif

    On avait vu que pour coder un tableau de flottants en C, il suffisait de rajouter des crochets [n], n représentant le nombre de flottants dans le tableau.

    Code:
    float tableau[6] /* Déclaration */;
    
    tableau[0] = ...; /* Assignation */
    tableau[1] = ...;
    /* suite jusqu'à l'indice 5 */
    ou

    Code:
    float tableau[6] = {12.5, ..., ...}; /* Déclaration + Assignation */
    mais on peut aussi

    Code:
    float tableau[] = {12.5, ..., ...}; /* Déclaration + Assignation de nombre de flottants que l'on veut /*
    On remarque dans la ligne de code ci-dessus, qu'entre les crochets, il n'y a pas d'entier. En C cela veut dire qu'on laisse gérer le compilateur, il calculera cet entier, selon les flottants que vous aurez entré.

    Pourquoi ce rappel ?

    Pourquoi présenter des flottants, alors que le cours est censé parler des chaînes de caractères ?

    Réponse: Une chaîne de caractères est un ensemble de caractères séparés. En C, on représente cela comme un tableau de caractères.

    Vous commencez à voir le rapprochement ? Oui, un tableau de flottants ou un tableau de caractères, ça se déclare de la même façon !

    Code:
    char chaine[] = "Hello World !";
    ou

    Code:
    char chaine[14] = "Hello World !";
    ou

    Code:
    char chaine[14]; /* Déclaration */
    
    chaine[0] = 'H';
    chaine[1] = 'e';
    chaine[...] = '...';
    chaine[13] = '\0';
    Dans ce dernier code, on voit que le dernier indice est caractérisé par un caractère nul ( '\0' ), très important car il permettra d'indiquer quand la chaîne se termine.

    Oui mais avant on l'a pas mis, pourquoi juste dans ce cas ? Car le compilateur dans les autres cas, va le gérer et le placer en fin de chaîne pour nous.

    Ok, ok c'est pour cela que tu as mis 14 caractères au lieu de 13 ? Oui tout à fait !

    La vision schématique des chaînes

    Je vous l'ai dis une chaîne de caractères est considéré comme un tableau de caractères. Imaginons que l'on veuille écrire la chaîne "Hello", ça sera vu de la façon ci-dessous.

    hello.gif

    Syntaxe entre caractère et caractères

    Un caractère est de type char
    Des caractères est de type char[] (tableau de caractères)

    Pour un caractère on utilisera les ' ', pour le tableau de caractères on utilisera les " ", vous voyez la subtilité? Voici un exemple ci-dessous

    Code:
    char letter = 'a'; /* Déclaration et assignation à la variable letter du caractère a */
    
    char chaine[] = "Hello World !";
    Modifier un caractère dans un tableau de caractères

    Imaginons que l'on veuille transformer la 1ère lettre d'une chaîne de minuscule en majuscule. À la base notre chaîne sera codée de cette façon.

    Code:
    char chaine[] = "hello";
    Le but est de transformer "hello" en "Hello"...

    Souvenez-vous ! C'est un tableau, on travaille donc avec les indices d'un tableau. Celui qui nous intéresse et l'indice 0. L'indice 0 représente le 'h' de "hello".

    Pour assigner une nouvelle valeur à la lettre 'h', on va utiliser l'opérateur = .

    Code:
    char chaine[] = "hello";
    
    chaine[0] = 'H'; /* on remplace l'ancienne valeur 'h' par la nouvelle valeur 'H' dans le tableau à l'indice 0 /*
    Tout simplement...

    Afficher une tableau de caractères

    Pour faire cela on utilisera une fonction qu'on admettra sans comprendre pour l'instant, car si je devais expliquer je parlerais de notions trop complexes pour des débutants en C, la fonction puts.

    Voici un exemple très simple

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        char tab[] = "Bonjour";
    
        puts(tab);
    
        return 0;
    }
    On voit que puts prend en paramètre simplement le nom de la variable sans les crochets...

    EXERCICES

    Exercice n°1

    Compléter le code ci-dessous, l'objectif étant de corriger une faute d'orthographe et de l'afficher en console (avec puts).

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        char tab[] = "Mécontant";
    
        /* Suite du code à compléter */
    
    
        /* Fin du code complété */
    
        return 0;
    }
    Exercice n°2

    On veut transformer un nom au pluriel en un même nom au singulier (faut retirer le 's'), compléter le code suivant. N'oubliez pas d'afficher en console avec puts.

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        char tab[] = "Livres";
    
        /* Suite du code à compléter */
    
    
    
        /* Fin du code complété */
    
        return 0;
    }
    Merci de m'avoir lu et à bientôt pour le prochain cours
    Dernière modification par fred, 28 juin 2014, 10h36.

  • #2
    Superbe cours encore merci et bravo.Je ne tari pas d'éloge car c'est vraiment compréhensible.En plus tu partage afin que nous puissions aussi nous débrouiller seul et c'est honorable.
    Voici le 1er exercice :

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        char tab[] = "Mécontant";
    
    tab[7]='e'; /*changer a en e*/
     puts(tab); /* afficher le mot corriger*/
        return 0;
    }
    et

    exercice 2:

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        char tab[] = "Livres";
    
      tab[5]='\0'; /*empecher la lecture du s*/
      
       puts(tab);*/afficher le mot au singulier*/
    
        return 0;
    }
    Juste pour ceux que ça interresse pour faire du code vite fait et le tester moi j'utiise http://ideone.com ca va plus vite en attendant de coder plus sérieusement.

    Commentaire


    • #3
      @Dreamus,

      C'est parfait ! Tu avais déjà fais du C ?

      Sinon, si tu peux amener du monde en faisant la promotion des cours, ça serait sympa

      Commentaire


      • #4
        Voila j'ai mis Thanks au 2 cours.Oui j'ai fait un peu de c et C++ mais comme cela en survolant.Mon domaine est plus réseaux web ,html,css,php,sql et javascript.Comme cela se rapproche du php je suis un peu à l'aise après développer seul dessus non je n'en serais nullement capable et j'espère avec tes cours progresser.

        Commentaire


        • #5
          Je serais un peu en retard mais je pense m'y mettre durant ces vacances.
          J'ai survolé un peu et ça m'a l'air super bien fait, comme d'habitude. Bref, MERCI.
          Mon blog : http://rootsheep.info

          Commentaire


          • #6
            Bonjour à tous,

            Code:
            #include <stdio.h>
            
            
            // === Exercice n°1 ===
            
            int main(void)
            {
                char tab[] = "Mecontant";
            
                tab[6] = 'e'; // correction de l'erreur
            
                printf("%s\n\n", tab); // Affichage de la chaîne
            
                return 0;
            }
            Code:
            #include <stdio.h>
            
            // === Exercice n°2 ===
            
            int main(void)
            {
                char tab[] = "Livres";
            
                tab[5] = '\0'; // On supprime de "s"
                
                printf("%s\n\n", tab); // On affiche le mot au singulier
            
                return 0;
            }
            Dernière modification par shirocen, 10 janvier 2015, 17h02.
            deux et deux font cinq

            Commentaire


            • #7
              Exercice n°1:
              Code:
              #include <stdio.h>
              
              int main(void)
              {
                  char tab[] = "Mécontant";
              
                  tab[6] = 'e';
                  puts(tab);
              
                  return 0;
              }
              Exercice n°2:

              Code:
              #include <stdio.h>
              
              int main(void)
              {
                  char tab[] = "Livres";
              
                  /* Suite du code à compléter */
                  tab[5] = '\0'; /* On place la fin de la chaîne à la place du 's' */
                  puts(tab);
              
                  /* Fin du code complété */
              
                  return 0;
              }
              Mon blog : http://rootsheep.info

              Commentaire


              • #8
                Super tes cours enfin des leçons ou ont peut tester et pas manger que de la théorie en block

                exo 1


                #include <stdio.h>

                int main(void)
                {
                char tab[] = "Mécontant ";

                tab[6] = 'e';

                puts(tab);

                return 0;
                }


                exo 2

                #include <stdio.h>

                int main(void)
                {

                char tab[6] = "Livres";

                tab[5] = '\0';

                puts(tab);

                return 0;

                }

                Commentaire


                • #9
                  Parfait, reste plus qu'à apprendre à mettre tes codes dans la balise code adapté avec "[CODE] ... [/CODE]" (sans les guillemets)

                  Tu peux rééditer ton code afin de vérifier que tu as compris de quoi je parle.

                  Super tes cours enfin des leçons ou ont peut tester et pas manger que de la théorie en block
                  Merci (il y a un bouton Thanks en bas à gauche de mon post)
                  Dernière modification par fred, 21 avril 2015, 15h42.

                  Commentaire


                  • #10
                    Bonjour,

                    Merci pour ton cours.

                    J'ai une petite question sur la raison qui t'a poussé à utiliser puts au lieu de printf pour afficher une chaine de caractère.
                    Je te remercie
                    B2B

                    Commentaire


                    • #11
                      puts est utilisé uniquement pour l'affichage d'une chaîne de caractères en y ajoutant le caractère de fin de ligne ('\n'), il fait donc exactement ce qu'on veut sans artifice et évitant les explications utiles concernant les paramètres de la fonction printf. Pour démarrer c'est la fonction parfaite et simple sans ajouter d'autres problèmes liés à la syntaxe.

                      Pourquoi s'embêter avec printf et devoir donner des explications sur le formatage de chaînes ?
                      Dernière modification par fred, 29 juin 2016, 15h25.

                      Commentaire


                      • #12
                        Merci pour ta réponse.
                        J'ai aussi eu ma réponse dans ton cours suivant

                        Commentaire


                        • #13
                          Simple, rapide qu'est ce qu'on veut de plus
                          Je révise mon langage C dis donc !
                          Code:
                          #include <stdio.h>
                          
                          int main(void)
                          {
                              /*********************************
                              * VARIABLE POUR EXERCICE
                              **********************************/
                              /* EXERCICE 1 */
                              char tab[] = "Mécontant";
                              /* EXERCICE 2 */
                              char tab_exercice_deux[] = "Livres";
                              /*********************************
                              * FIN DE VARIABLE POUR EXERCICE
                              **********************************/
                              /* DECLARATION DE VARIABLE */
                              char lettre;
                              char chaine_qui_contient_aucun_caractere[10];
                          
                              /*DECLARATION ET ASSIGNATION VARIABLE */
                              char chaine[] = "bonjour !";
                              char chaine_deux[] = {"bonjour !"};
                          
                              /* Ce sont exactement la même chaine
                               * Sauf que une asigner entre acolade
                               * et double guillemet.
                               *  Et l'autre entre double guillemet*/
                              puts("===LES CHAINE DE CARACTERE===");
                              putchar('\n');
                              puts("Affiche le contenu de mes chaine deja assigner");
                              printf("chaine      : %s\n", chaine);
                              printf("chaine_deux : %s\n", chaine_deux);
                          
                              /* Affecte le caractere B dans la variable lettre
                               * Affecte respectivement les caractere : B,o,n,j,o,u,r, ,!,\0
                               */
                              putchar('\n');
                              puts("Je comence a remplire ma chaine ici !");
                              lettre = 'B';
                              chaine_qui_contient_aucun_caractere[0] = lettre;
                              chaine_qui_contient_aucun_caractere[1] = 'o';
                              chaine_qui_contient_aucun_caractere[2] = 'n';
                              chaine_qui_contient_aucun_caractere[3] = 'j';
                              chaine_qui_contient_aucun_caractere[4] = 'o';
                              chaine_qui_contient_aucun_caractere[5] = 'u';
                              chaine_qui_contient_aucun_caractere[6] = 'r';
                              chaine_qui_contient_aucun_caractere[7] = ' ';
                              chaine_qui_contient_aucun_caractere[8] = '!';
                              chaine_qui_contient_aucun_caractere[9] = '\0';
                          
                              printf("Voici votre chaine de caractere : %s\n", chaine_qui_contient_aucun_caractere);
                              puts("Je ne veut de la lettre 'r' j'ai deteste cette lettre !"); /* J'AI PERDU TOUT LES AUTRE LETTRE :'( */
                              lettre = '\0';
                              chaine_qui_contient_aucun_caractere[6] = lettre; /* Equivalent a faire chaine_qui_..._caractere = '\0' */
                              printf("Voici votre chaine de caractere : %s\n", chaine_qui_contient_aucun_caractere);
                              putchar('\n');
                              putchar('\n');
                              /**************************************************************************
                              *                   EXERCICE - Les chaine de caractere
                              ***************************************************************************/
                          
                              puts("===EXERCICE===");
                          
                              /* EXERCICE 1*/
                              tab[6] = 'e';
                              puts(tab);
                              /* FIN*/
                          
                              /* EXERCICE 2 */
                              tab_exercice_deux[5] = '\0';
                              puts(tab_exercice_deux);
                              /* FIN */
                          
                              return 0;
                          }
                          Dernière modification par Anonyme77, 11 août 2016, 18h10.

                          Commentaire


                          • #14
                            Bonjour, bonsoir, Génial les cours, ça fais 2 jours que j'ai commencé a apprendre la programmation et avec tes cours je trouve ça vraiment amusant, merci !

                            Commentaire

                            Chargement...
                            X