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).
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...
Copyright Squale92 & Verstand. Logo et sigle TCI® réservés. Développé pour MS Internet Explorer 5.0 en 1024x768 pixels. Page modifiée le