Home   Archives    Hardware   Programmation   Challenges   Forum   Le Mag    Faq   La Communauté   L'Equipe
 
L'équipe progG de Ti-Fr

Voici les nicks de vos serviteurs ;-)

chickensaver_john
Kevin Kofler
Thibaut
janjan2
TiMad
Iceman89
fréka
Zewoo
Squale92
Verstand
ZdRUbAl
UtOpIaH

et nEUrOne ...

Une idée ?
Une idée pour améliorez cette partie? ou tout simplement vous souhaitez participer à l'élaborations des tutos.
Mailez-nous ici

Les raccourcis
 

Chapitre XXVI


    Suite à de nombreuses demandes et au fait que je ne veux pas faire de topic trop long dans la FAQ de ce tutorial, voici un Chapitre traitant des manipulations de chaînes de caractères. Les fonctions que nous étudierons ici sont principalement issues du fichier <string.h> de TIGCC.

    Depuis le tout premier programme que nous ayons étudié, nous manipulons sans même y prêter attention de nombreuses chaînes de caractères, par exemple, à chaque fois que nous voulons afficher un message à l'écran, donner un titre à une boîte de dialogue, ou bien d'autres choses encore...
    Mais, les chaînes de caractères peuvent être manipulées de façon beaucoup plus complète que nous ne l'avons fait : elles peuvent être copiées, concaténées, comparées...

 

I:\ Copie de Chaînes de caractères :

        A: Copie d'une chaîne de caractères entière :

    Bien souvent; il peut être utile de copier le contenu d'une chaîne de caractères entière vers une autre. Dans de tels cas, voici la fonction qu'il faut utiliser :
        strcpy(destination, origine);

    Cette fonction prend en argument deux chaînes de caractères, et copie origine dans destination.
Attention : la chaîne de destination doit être suffisamment longue pour recevoir la chaîne d'origine !!!

    Cette fonction renvoie une variable de type pointeur vers un tableau de caractères, qui pointe sur destination (On peut donc accéder à celle-ci de deux manières différentes).

  • Pour copier une chaîne de caractères dans une variable de type tableau de caractères :
            char ma_str[taille];    // Déclare la variable ma_str comme étant de type tableau de chars.
            strcpy(ma_str, "contenu");    // Copie la chaîne de caractères "contenu" dans la variable ma_str.
        A présent, la variable ma_str contient la chaîne de caractères "contenu".
        Il vous suffit de remplacer la taille de la chaîne de caractère de destination par une valeur assez grande pour contenir tout le contenu...
  • Pour copie le contenu d'une variable de type tableau de caractères vers une autre :
            char ma_str_1[taille1];    // Déclare la variable ma_str_1 comme étant de type tableau de chars.
            char ma_str_2[taille2];    // Déclare la variable ma_str_1 comme étant de type tableau de chars.
            strcpy(ma_str_1, "Contenu de str 1");    // Copie la chaîne de caractères "contenu de str 1" dans la variable ma_str_1.
            strcpy(ma_str_2, ma_str_1);    // Copie le contenu de la variables ma_str_1 dans la variable ma_str_2.
        A présent, la variable ma_str_2 contient la même chose que ma_str_1, c'est-à-dire la chaîne de caractères "contenu de str 1".
       Attention : taille2 doit (pour raisons de sécurité, aux cas où la variable ma_str_1 soit complètement remplie !) être supérieure ou égale à taille1, puisque l'on copie ma_str_1 vers ma_str_2 !

       B: Copie d'une portion de chaîne de caractères :

    Il est aussi possible de ne copier qu'une certain nombre de caractères d'un chaîne vers une autre. Pour cela, il convient d'utiliser l'instruction suivante :
        strncpy(destination, origine, nbr_de_caracteres);
    Cette fonction fonctionne exactement de la même façon que la précédente (les deux premiers arguments sont identiques), mais elle prend en plus un troisième argument, nbr_de_caractères, qui correspond au nombre de caractères qui seront copiés de la chaîne origine vers la chaîne destination. La variable nbr_de_caracteres est de type unsigned long, ce qui signifie que vous pouvez copier jusqu'à 4.294.967.296 caractères (Ca fait quand même pas mal de fois ce que la mémoire de la TI peut contenir !) en utilisant cette fonction...
    Attention : Pour éviter tout risque de plantage, la variable destination doit être assez grande pour pouvoir recevoir le nombre de caractères précisé !
    Cette fonction renvoie une variable de type pointeur vers un tableau de caractères, qui pointe sur destination (On peut donc accéder à celle-ci de deux manières différentes).

 

II:\ Concaténation de deux chaînes de caractères :

    Si vous ne savez pas ce que signifie le terme de concaténation, voici sa définition (ne vous inquiétez pas : la première fois que je l'ai vu, j'ai été chercher mon dictionnaire !) : "(Du latin cum, avec, et catena, chaîne) En informatique, enchaînement de deux chaînes de caractères ou de deux fichiers mis bout à bout". (Source : Petit Larousse 2000). Comme vous pouvez le constater, c'est plus simple que ce que le terme pouvait vous faire craindre !

    Nous allons ici voir deux fonctions, dont la syntaxe est la même que celle que nous avons étudié dans le I de ce chapitre. Nous ne la ré-expliquerons donc pas en détails... Il faut juste que vous sachiez que, ici, la chaîne de caractères origine sera placée à la suite de la chaîne de caractères destination, qui doit, bien entendu, être de taille suffisante pour contenir l'assemblage des deux chaînes...

    Comme pour la copie de chaînes de caractères, il existe une fonction permettant de mettre bout à bout deux chaînes entières. La voici :
        strcat(destination, origine);
    Et voici celle qui permet de choisir combien de caractères de origine devront être placés à la suite de destination :
        strncat(destination, origine, nbr_de_caracteres);
    Les arguments de ces deux fonctions et ce qu'elles renvoient sont identiques aux fonctions de copies de chaînes de caractères.

 

III:\ Comparaison de deux chaînes de caractères :

    Il est, en C, possible de comparer les contenus de deux chaînes de caractères, mais cela ne doit pas se faire comme pour les nombres, en utilisant quelque chose du type if(str_1 != str_2)... En effet, cette opération n'est pas correcte (en supposant que str_1 et str_2 sont des chaînes de caractères).

    En fait, pour effectuer une comparaisons entre deux chaînes de caractères entières, il convient d'utiliser cette fonction :
        strcmp(str_1, str_2);
    Cette fonction prend en arguments deux chaînes de caractères (ou deux variables de type tableau de chars), et renvoie une valeur de type short, qui sera différente de 0 si les deux chaînes sont différentes, et qui vaudra 0 si les deux chaînes sont identiques.
    Donc, pour tester si str_1 et str_2 sont identiques, il conviendra de faire :
        if(!strcmp(str_1, str_2))
        {
            // Opérations à effectuer si str_1 et str_2 sont identiques...
        }

    De la même façon que pour la copie et la concaténation, il est possible de ne travailler qu'avec une partie des chaînes de caractères. Ainsi, la fonction suivante ne comparera qu'une partie des deux chaînes qui lui sont données en arguments :
        strncmp(str_1, str_2, nbr_de_caracteres);
    Cette fonction ne comparera que nbr_de_caracteres (Cet argument est une valeur de type unsigned long) des deux chaînes, en partant de la gauche (du début :-)) de celles-ci. A part cela, elle se comportera exactement de la même façon que strcmp.

 

IV:\ Formater des chaînes de caractères :

    Nous avons déjà utilisé dans nos programmes la fonction printf. Eh bien, ici, nous allons apprendre comment utiliser une fonction qui est employée par printf pour obtenir des chaînes de caractères formatées.

    Il va s'agir d'utiliser la fonction suivante :
        sprintf(str, format, ...);
    Le premier argument que prend cette fonction est une variable de type chaîne de caractères (tableau de chars). Le second correspond à une chaîne de caractères similaire à celle que vous pouvez passer à la fonction printf. Ensuite, il faut introduire les variables correspondant aux balises placées dans la chaîne de caractères du second argument.

    Pour vous donner une idée plus claire du fonctionnement de cette fonction, nous allons prendre l'exemple suivant :
        char str_formatee[50];
        short valeur_de_type_short_1 = 0;
        unsigned long valeur_de_type_u_long_1 = 0;
        char str_courte[6];

        valeur_de_type_short_1 = 523;        // La variable valeur_de_type_short_1 vaut à présent 523...
        valeur_de_type_u_long_1 = 456451231;        // La variable valeur_de_type_u_long_1 vaut à présent 456451231...
        strcpy(str_courte, "Salut");        // La Chaîne de caractères str_courte vaut à présent "Salut"...

        sprintf(str_formatee, "Entier : %i  U_Long : %ul  STR : %s", valeur_de_type_short_1, valeur_de_type_u_long_1, str_courte);

        FontSetSys(F_4x6);
        DrawStrXY(0, 0, str_formatee, A_NORMAL);
        ngetchx();

    Ce code va afficher à l'écran la chaîne de caractères suivante (Enfin, si l'écran est assez grand... Dans le cas contraire, la chaîne ne sera pas affichée entièrement... Mais ce n'est pas ce qui nous intéresse ici !) :
        "Entier : 523  U_Long : 456451231  STR : Salut".

    Attention : Quand vous utilisez cette fonction, il faut, comme avec la fonction printf, utiliser les balises correspondant aux types des variables que vous souhaitez inclure dans la chaîne de caractères. Dans le cas contraire, vous obtiendrez une chaîne incorrecte. Ces balises sont détaillées dans la doc de TIGCC, et nous les replacerons pas ici, car elles sont très nombreuses, et prendraient trop de place...

 

V:\ Taille d'une chaîne de caractères :

    Il existe aussi une fonction souvent utile, que nous avons déjà utilisé sans l'expliquer, je crois, dans le Chapitre traitant des manipulations de la VAT. Il s'agit de celle qui permet de déterminer le nombre de caractères présent dans une chaîne. Voilà cette fonction :
        strlen(str);
    Cette fonction prend en argument une chaîne de caractères (ou une variable de type tableau de chars), et renvoie une valeur de type unsigned long, correspondant au nombre de caractères présents dans la chaîne.

 

 

    Voilà, vous avez atteint la fin de ce chapitre... J'espère qu'il vous a permis de comprendre pas mal de choses... Certes, le fichier <string.h> contient encore d'autres fonctions permettant de manipuler des chaînes de caractères (recherche dans une chaîne, par exemple), mais je ne les juge pas très utile... Si vous pensez qu'il serait tout de même bon qu'elles soient placées dans ce tutorial, faite le moi savoir...

Retour au menu général

Chapitre XXV


 


Copyright © Ti-Fr v2.0 1999-2002