Annonce

Rduire
Aucune annonce.

Cours langage C n2 - Les chanes de caractres

Rduire
Ceci est une discussion importante.
X
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Cours langage C n2 - Les chanes de caractres

    LES CHANES DE CARACTRES

    Les chanes de caractres en C est un cours pas vident. En gnral ce genre de cours s'explique au centre d'un bouquin car des difficults interviennent (mmoire, pointeurs, ...), mais je me vois pas expliquer le C sans taper du texte dans nos code.

    Mmoire? 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 n1...

    tableau_types.gif

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

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

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

    Code:
    float tableau[] = {12.5, ..., ...}; /* Dclaration + 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 grer le compilateur, il calculera cet entier, selon les flottants que vous aurez entr.

    Pourquoi ce rappel ?

    Pourquoi prsenter des flottants, alors que le cours est cens parler des chanes de caractres ?

    Rponse: Une chane de caractres est un ensemble de caractres spars. En C, on reprsente cela comme un tableau de caractres.

    Vous commencez voir le rapprochement ? Oui, un tableau de flottants ou un tableau de caractres, a se dclare de la mme faon !

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

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

    Code:
    char chaine[14]; /* Dclaration */
    
    chaine[0] = 'H';
    chaine[1] = 'e';
    chaine[...] = '...';
    chaine[13] = '\0';
    Dans ce dernier code, on voit que le dernier indice est caractris par un caractre nul ( '\0' ), trs important car il permettra d'indiquer quand la chane se termine.

    Oui mais avant on l'a pas mis, pourquoi juste dans ce cas ? Car le compilateur dans les autres cas, va le grer et le placer en fin de chane pour nous.

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

    La vision schmatique des chanes

    Je vous l'ai dis une chane de caractres est considr comme un tableau de caractres. Imaginons que l'on veuille crire la chane "Hello", a sera vu de la faon ci-dessous.

    hello.gif

    Syntaxe entre caractre et caractres

    Un caractre est de type char
    Des caractres est de type char[] (tableau de caractres)

    Pour un caractre on utilisera les ' ', pour le tableau de caractres on utilisera les " ", vous voyez la subtilit? Voici un exemple ci-dessous

    Code:
    char letter = 'a'; /* Dclaration et assignation  la variable letter du caractre a */
    
    char chaine[] = "Hello World !";
    Modifier un caractre dans un tableau de caractres

    Imaginons que l'on veuille transformer la 1re lettre d'une chane de minuscule en majuscule. la base notre chane sera code de cette faon.

    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 intresse et l'indice 0. L'indice 0 reprsente le 'h' de "hello".

    Pour assigner une nouvelle valeur la lettre 'h', on va utiliser l'oprateur = .

    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 caractres

    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 dbutants en C, la fonction puts.

    Voici un exemple trs simple

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

    EXERCICES

    Exercice n1

    Complter 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[] = "Mcontant";
    
        /* Suite du code  complter */
    
    
        /* Fin du code complt */
    
        return 0;
    }
    Exercice n2

    On veut transformer un nom au pluriel en un mme nom au singulier (faut retirer le 's'), complter 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  complter */
    
    
    
        /* Fin du code complt */
    
        return 0;
    }
    Merci de m'avoir lu et bientt pour le prochain cours
    Dernire modification par fred, 28 juin 2014, 10h36.

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

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        char tab[] = "Mcontant";
    
    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 srieusement.

    Commentaire


    • #3
      @Dreamus,

      C'est parfait ! Tu avais dj 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 rseaux web ,html,css,php,sql et javascript.Comme cela se rapproche du php je suis un peu l'aise aprs dvelopper seul dessus non je n'en serais nullement capable et j'espre 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 n1 ===
            
            int main(void)
            {
                char tab[] = "Mecontant";
            
                tab[6] = 'e'; // correction de l'erreur
            
                printf("%s\n\n", tab); // Affichage de la chane
            
                return 0;
            }
            Code:
            #include <stdio.h>
            
            // === Exercice n2 ===
            
            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;
            }
            Dernire modification par shirocen, 10 janvier 2015, 17h02.
            deux et deux font cinq

            Commentaire


            • #7
              Exercice n1:
              Code:
              #include <stdio.h>
              
              int main(void)
              {
                  char tab[] = "Mcontant";
              
                  tab[6] = 'e';
                  puts(tab);
              
                  return 0;
              }
              Exercice n2:

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

              Commentaire


              • #8
                Super tes cours enfin des leons ou ont peut tester et pas manger que de la thorie en block

                exo 1


                #include <stdio.h>

                int main(void)
                {
                char tab[] = "Mcontant ";

                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 rditer ton code afin de vrifier que tu as compris de quoi je parle.

                  Super tes cours enfin des leons ou ont peut tester et pas manger que de la thorie en block
                  Merci (il y a un bouton Thanks en bas gauche de mon post)
                  Dernire 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 caractre.
                    Je te remercie
                    B2B

                    Commentaire


                    • #11
                      puts est utilis uniquement pour l'affichage d'une chane de caractres en y ajoutant le caractre de fin de ligne ('\n'), il fait donc exactement ce qu'on veut sans artifice et vitant les explications utiles concernant les paramtres de la fonction printf. Pour dmarrer c'est la fonction parfaite et simple sans ajouter d'autres problmes lis la syntaxe.

                      Pourquoi s'embter avec printf et devoir donner des explications sur le formatage de chanes ?
                      Dernire modification par fred, 29 juin 2016, 15h25.

                      Commentaire


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

                        Commentaire


                        • #13
                          Simple, rapide qu'est ce qu'on veut de plus
                          Je rvise mon langage C dis donc !
                          Code:
                          #include <stdio.h>
                          
                          int main(void)
                          {
                              /*********************************
                              * VARIABLE POUR EXERCICE
                              **********************************/
                              /* EXERCICE 1 */
                              char tab[] = "Mcontant";
                              /* 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 mme 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;
                          }
                          Dernire modification par Anonyme77, 11 aot 2016, 18h10.

                          Commentaire


                          • #14
                            Bonjour, bonsoir, Gnial 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