|
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
|
| |
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
|
|