1 / 31

GEF 243B Programmation Informatique Appliquée

GEF 243B Programmation Informatique Appliquée. Strings §11.1 - 11.3. 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; Qu’est-ce qu’un type dérivé?. Synopsis.

Download Presentation

GEF 243B Programmation Informatique Appliquée

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GEF 243BProgrammation Informatique Appliquée Strings §11.1 - 11.3

  2. 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; • Qu’est-ce qu’un type dérivé? JGA Beaulieu

  3. 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 JGA Beaulieu

  4. "Généralités" • Jusqu’à maintenant nous avons traité les strings de façon superficiel. • Nous comprenons qu’un string représente une “chose” dans l’environnement que l’on nomme • Nous nommons les choses pour faire l’abstractionde ce qu’elles 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 JGA Beaulieu

  5. "Généralités\0" • Un string est une unité logique de stockage dérivée du type de stockage physiquechar • Ce qui est intéressant avec les strings c’est qu’ils 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é? JGA Beaulieu

  6. Taxonomie des Strings • Dans une vue globale, les chaînes de caractères (strings) viennent en deux saveurs: Longueur fixe ou variable JGA Beaulieu

  7. "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éralde longueur fixe char* province1 = "ON"; //Abrévi de 3 char char province2[] = "AB"; //3 char array JGA Beaulieu

  8. "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'; //J’ai fini JGA Beaulieu

  9. "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 l’utilisation // Le \0 n’est pas requis et est ajouté // automatiquement par le compilateur pour les //double guillemets • C’est presque identique à char nom[] = "Superfragelisticespialladotious"; JGA Beaulieu

  10. "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 n’importe quel caractère dans l’alphabet. ASCII fournit 128 caractères • Nous aurions pu utiliser un espace ou la lettre a • Mais le caractère n’aurait pas pu être utilisé pour autre but que de signifier la fin logique du string JGA Beaulieu

  11. Des choses spéciales pour les strings JGA Beaulieu

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

  13. 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"; JGA Beaulieu

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

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

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

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

  18. printf() un caractère à la fois JGA Beaulieu

  19. printf() un caractère à la fois JGA Beaulieu

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

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

  22. strcpy() • Utilisez strcpy() pour copier un string vers un autre • Attention à la longueur des strings JGA Beaulieu

  23. 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 JGA Beaulieu

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

  25. La longueur d’un 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!! JGA Beaulieu

  26. La longueur d’un string #include <stdio.h> #include <stdlib.h> #include <strings.h> 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; } JGA Beaulieu

  27. 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 JGA Beaulieu

  28. 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 JGA Beaulieu

  29. 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 d’exécution si vous allez en dehors d’un tableau de char! • En Dev-C++ c’est beaucoup plus facile de déboguer un programme avec des pointeurs!!! JGA Beaulieu

  30. Il 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. JGA Beaulieu

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

More Related