Title: GEF 243B Programmation Informatique Applique
1GEF 243BProgrammation Informatique Appliquée
2Revue
- Que font les jetons de formatage suivants dans
lénoncé printf? - d
- c
- p
- 5.2f
- s
- Quest-ce quun type dérivé?
3Synopsis
- Les Strings en générale et comment ils sont
traités en C - Les Strings de longueur fixe et variable
- Tableaux et strings
- Pointeurs et strings
- Le caractère délimitant
- Quelques des fonctions les plus utiles en C pour
les strings
4"Généralités"
- Jusquà maintenant nous avons traité les strings
de façon superficiel. - Nous comprenons quun string représente une
chose dans lenvironnement que lon nomme - Nous nommons les choses pour faire labstraction
de ce quelles sont - La pluparts des langages fournissent un type
spécifique pour les strings tel que Pascal ou
Java - En C on utilise deux types dérivés pour
entreposer les strings - Tableaux (Arrays)
- Pointeurs
5"Généralités\0"
- Un string est une unité logique de stockage
dérivée du type de stockage physique char - Ce qui est intéressant avec les strings cest
quils peuvent et doivent varier en longueur - Surnom pas tous de la même longueur
- Marque de voiture
- Couleur
- Comment sélectionnons-nous le bon type dérivé et
la structure de données approprié?
6"Généralités\0"
- En fin de compte, les strings viennent en deux
saveurs longueur fixe et variable - Longueur fixe
- Tableau de caractères qui stocke toujours le même
nombre de caractères - char codeDePièce5 //code de 5 alphanum
- Pointeur à un littéral de longueur fixe
- char province "ON" //Abrévi de 2 char
- char province "AB" //3 char array
7"Généralités\0"
- Longueur variable
- Tableau de caractères avec délimiteur
- char surnom30 "\0" //string vide
-
- surnom0 "B"
- surnom1 "e"
- surnom2 "a" //le reste de mon nom
-
- surnom8 "u"
- surnom9 "\0" //Jai fini
8"Généralités\0"
- Longueur variable
- Pointeur à un littéral de longueur maximal
- char nom "Superfragelisticespialladotious\0"
- //Ceci est dangereux pcq vous devez trouver
- //le nom le plus long et planifier lutilisation
- // Le \0 nest pas requis et est ajouté
- // automatiquement par le compilateur pour les
- //double guillemets
- Cest presque identique à
- char nom "Superfragelisticespialladotious"
9"Généralités\0"
- Dans les deux strings de longueur variable que
nous avons utilisé, on a un \0 - \0 est utilisé en C comme arrêt logique pour dire
à nos fonctions que nous avons fini. - Nous aurions pu utiliser nimporte quel caractère
dans lalphabet. ASCII fournit 128 caractères - Nous aurions pu utiliser un espace ou la lettre a
- Mais le caractère naurait pas pu être utilisé
pour autre but que de signifier la fin logique du
string
10Une chose logique à faire
- Donc pourquoi dire que un string est un type
dérivé - logique
Forouzan Figure 11-6
Fait partie du Tableau mais pas du string
Stockage logique un string qui finit avec \0
Stockage physique un tableau de 11 char
11Des choses spéciales pour les strings
Figure 11-4
12Des fonctions utiles pour les strings
- de stdio.h
- printf
- gets
- fgets
- puts
- fputs
- de string.h
- strcat
- strncat
- strlen
- itoa
13printf un char à la fois
Figure 11-8
14printf un char à la fois avec pointeur
Figure 11-9
15printf un char à la fois avec pointeur
Figure 11-10
16Figure 11-11
17Figure 11-12
18Figure 11-18
19La longueur dun string
- strlen()
- strlen retourne le nombre de caractères dans une
string avant le premier \0 - sizeof() va retourner le nombre de caractères
alloués pour le tableau (array) - NOTE sizeof et strlen ne retourne PAS la même
chose!!
20La longueur dun string
- include ltstdio.hgt
- include ltstdlib.hgt
- include ltstrings.hgt
- int main(int argc, char argv)
-
- char test25 "This is a test"
-
- printf(s\n,test)
- printf("strlen() d sizeof d\n",strlen(test),s
izeof(test)) - getch()
- return 0
-
21Comparer deux strings
- strcmp(char s1,char s2)
- Compare deux strings
- Retourne
- 0 si égale
- -1 if s1gts2
- 1 if s1lts2
- Peut être utilisé pour trier en ordre alphabétique
22itoa(int value, char outString, int radix)
- printf, scanf, et sprintf demande beaucoup de
mémoire! - Pour les systèmes imbriqués comme le robot les
petites fonctions avec moins de fonctionnalités
sont utilisées - itoa
- Convertie les valeurs integer en string et met le
résultat dans outString - La valeur peut être converti en binaire, décimal,
ou hexadécimal comme indiqué par le radix
23itoa(int value, char outString, int radix)
- outString est un pointeur dans la définition de
la fonction - En appelant itoa(), outString doit pointer à de
la mémoire allouée
char convertedInt itoa(17,convertedInt,10)
// Erreur pas de mémoire allouée
char convertedInt10 itoa(17,convertedInt,10)
OK
24Danger Will Robinson!
- Aucune des fonctions vérifie si vous avez assez
de mémoire allouée! - Vous pouvez causer un Écrasement du noyau sur la
brique si vous écrivez sur un string qui est
initialisée ou trop court! - En Dev-C vous allez avoir un erreur dexécution
si vous allez en dehors dun tableau de char! - En Dev-C cest beaucoup plus facile de déboguer
un programme avec des pointeurs!!!
25Il y a bien plus de fonctions pour les string
- Forouzan Appendice F
- Ou le site gnu
- http//www.gnu.org/software/libc/
- Faites un recherche sur votre ordi ou google pour
les fonctions de string - \0 est votre ami et il fonctionne.
- Vérifiez les fonctions de string dur le site web
du cours et lisez les descriptions avant la
prochaine période de labo.
26Quiz Time
- Quelles sont les deux types de strings
- Pourquoi dit-on que les strings sont un type
dérivé logique? - Comment est-ce que le stockage logique est
implémenté? - Donnez le code pour convertir la valeur integer
127 en string décimal.