La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

GEF 243B Programmation Informatique Appliquée Strings §11.1 - 11.3.

Présentations similaires


Présentation au sujet: "GEF 243B Programmation Informatique Appliquée Strings §11.1 - 11.3."— Transcription de la présentation:

1 GEF 243B Programmation Informatique Appliquée Strings §

2 21-Jan-14 2 JGA Beaulieu Revue Que veut-on dire par déréférencer un pointeur? Étant donné ce qui suit: int a = 8; int* p; char b = 'v'; char* r; p=&a; Peut-on faire ceci? r = p; *p=(int)b; Quest-ce quun type dérivé?

3 21-Jan-14 3 JGA Beaulieu Synopsis Les Strings en générale et comment ils sont traités en C Les Strings de longueur fixe Les Strings de longueur variable avec Tableaux Les Strings de longueur variable avec Pointeurs Le caractère délimitant Quelques des fonctions les plus utiles en C pour les strings Formatage de sortie

4 21-Jan-14 4 JGA Beaulieu "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 21-Jan-14 5 JGA Beaulieu "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 21-Jan-14 6 JGA Beaulieu Taxonomie des Strings Dans une vue globale, les chaînes de caractères (strings) viennent en deux saveurs: Longueur fixe ou variable

7 21-Jan-14 7 JGA Beaulieu "Généralités\0" Longueur fixe – Tableau de caractères qui stocke toujours le même nombre de caractères char numDeCollege[5]; //code de 5 alphanum Pointeur à un littéral de longueur fixe char* province1 = "ON"; //Abrévi de 3 char char province2[] = "AB"; //3 char array

8 21-Jan-14 8 JGA Beaulieu "Généralités\0" Longueur variable – Tableau de caractères avec délimiteur char surnom[30] = '\0'; //string vide … surnom[0] = 'B'; surnom[1] = 'e'; surnom[2] = 'a'; //…le reste de mon nom … surnom[8] = 'u'; surnom[9] = '\0'; //Jai fini

10 21-Jan JGA Beaulieu "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

11 21-Jan JGA Beaulieu Des choses spéciales pour les strings

12 21-Jan JGA Beaulieu Donc pourquoi dire que un string est un type dérivé logique : Stockage physique un tableau de 11 char Stockage logique un string qui finit avec \0 Une chose logique à faire… Fait partie du Tableau mais pas du string

13 21-Jan JGA Beaulieu Initialisation des strings Les strings peuvent être initialisés de la même façon que les autres tableaux avec ou sans dimension ou avec un pointeur char str[9] = "Good Day"; char str[9] = {'G','o','o','d',' ','D', 'a', 'y'}; char mois[]= "janvier"; char* pStr = "Good Day";

14 21-Jan JGA Beaulieu Des fonctions utiles pour les strings de stdio.h printf gets fgets puts fputs de string.h strcat strncat strlen itoa

15 21-Jan JGA Beaulieu Formatage de Sorties On peut utiliser scanf() pour lire les strings du clavier et printf() pour afficher à lécran float x = ; printf("La taxe est $%8.2f dollars cette année.\n", x); La taxe est $ dollars cette année. int y = 2010; printf((La taxe est $%8.2f dollars en %d.\n", x, y); La taxe est $ en 2010.

16 21-Jan JGA Beaulieu Formatage de Sorties Voici les spécifications de format pour scanf() et printf().

17 21-Jan JGA Beaulieu Formatage de Sorties Voici les flags et code de conversion pour printf().

18 21-Jan JGA Beaulieu printf() un caractère à la fois

19 21-Jan JGA Beaulieu printf() un caractère à la fois

20 21-Jan JGA Beaulieu Entrée de string Les fonctions gets() et fgets() prennent une ligne terminé par \n et la convertissent en string terminé par \0

21 21-Jan JGA Beaulieu Sortie de string Les fonctions puts() et fputs() prennent une ligne de la mémoire et lécrivent à lécran ou au fichier

22 21-Jan JGA Beaulieu strcpy() Utilisez strcpy() pour copier un string vers un autre Attention à la longueur des strings

23 21-Jan JGA Beaulieu strcmp() Utilisez strcmp() pour comparer deux strings Attention à la longueur des strings retourne 0 si s1==s2 retourne -1 si s1< s2 retourne 1 si s1>s2

24 21-Jan JGA Beaulieu strcat() Utilisez strcat() pour concaténer deux strings On peut spécifier combien de char à concaténer avec strncat()

25 21-Jan JGA Beaulieu La longueur dun string strlen() retourne le nombre de caractères dans un 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!!

26 21-Jan JGA Beaulieu #include int main(int argc, char *argv[]) { char test[25] = "This is a test"; printf(%s\n,test); printf("strlen(): %d sizeof %d\n",strlen(test),sizeof(test)); getch(); return 0; } La longueur dun string

27 21-Jan JGA Beaulieu itoa(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(int value, char *outString, int radix) 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

28 21-Jan JGA Beaulieu itoa(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* convertedInt[10]; itoa(17,convertedInt,10); } //OK

29 21-Jan JGA Beaulieu Danger 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!!!

30 21-Jan JGA Beaulieu Il y a bien plus de fonctions pour les string Forouzan Appendice F Ou le site gnu 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.

31 21-Jan JGA Beaulieu Quiz 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.


Télécharger ppt "GEF 243B Programmation Informatique Appliquée Strings §11.1 - 11.3."

Présentations similaires


Annonces Google