Les chaînes de caractères

Slides:



Advertisements
Présentations similaires
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
Advertisements

GEF 243B Programmation informatique appliquée
Premier programme en C :
La boucle for : init7.c et init71.c
Cours de C – Séance dexercices 12 Octobre Exercice 5 Idem quexercice 1 : lire une ligne au clavier Sans limitation de la longueur de la ligne (utilisez.
Introduction au Langage C,C++
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Rappels C.
GEF 243B Programmation Informatique Appliquée
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
C.
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
FLSI602 Génie Informatique et Réseaux
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
TRAITEMENT DE STRUCTURES
Les fichiers et les chaînes de caractères
Python La programmation objet
FICHIERS.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Abder Alikacem Semaine 13 La récursivité
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
Les chaînes de caractères
LANGAGE C LP A2I IUT St DIE
Plan cours La notion de pointeur et d’adresse mémoire.
L’essentiel du langage C
Structures des données
Le langage C Structures de données
B.Shishedjiev - Informatique II
2.1 - Historique Chapitre 2 : Introduction au langage C++
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
Les types.
8PRO107 Éléments de programmation Les chaînes de caractères.
Autres éléments du langage
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
Strings et Tableaux en Java
Les chaînes de caractères
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les types composés Les enregistrements.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Structures de contrôle
8PRO100 Éléments de programmation Les pointeurs de caractères.
Chaînes de caractères en langage c, c'est en fait un tableau
Fiabilisation des lectures au clavier. Problèmes liés à scanf: rencontre de caractères invalides Sans arrêt prématuré: compte = scanf(``%d%c``;&n,&c);
Le Préprocesseur. Sujets abordés: Préprocesseur –Qu’est ce? –Qu’est ce qu’une directive? Les macros –Les définir, les redéfinir, les dé-définir –Les macros.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Mettre en formeExaminerManipuler Les fonctions printf() et sprintf Le traitement de chaîne de caractère La fonction printf() formate le contenu d'une chaîne.
1 Les caractères En informatique, les caractères sont très importants puisqu’ils sont utilisés pour la communication personne-machine. Puisque les ordinateurs.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Les entrées-sorties élémentaires
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 2A Langage C 4ème séance
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
Transcription de la présentation:

Les chaînes de caractères Peut on écrire de poèmes? B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Présentation La chaîne de caractères présentée par un tableau de caractères. La fin de la chaîne actuelle est dénotée par '\0' déclaration initialisation 'B' 'o' 'n' 'j' 'u' 'r' '\0' ? char nom[longueur]; char chaine[10]; char machaine[]= {'B','o','n','j','o','u','r','\0'}; char machaine[10]= {'B','o','n','j','o','u','r','\0'}; char machaine[]= "Bonjour"; char machaine[8]= "Bonjour"; char *p = "Bonjour";// Attention c'est constante B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Présentation B o n j u r ? Le tableau doit avoir assez d'éléments La différence entre tableau de caractères et pointeur vers une chaîne constante char ch1[7]= "Bonjour";// erreur d'exécution char ch2[6]= "Bonjour"; //erreur de compilation B o n j u ? char a[]= "Bonjour"; char *p= "Bonjour"; a: B o n j u r \0 p: B o n j u r \0 B.Shishedjiev - Informatique II

Traitement des chaînes Access aux caractères La longueur de la chaîne est égale à l'indice du NUL caractère, mais le dernier caractère à un indice qui est inférieur par un. ch: 'B' 'o' 'n' 'j' 'u' 'r' '\0' ? ch[0] ch[7] ch[1] B.Shishedjiev - Informatique II

Initialisation et affectation tableau pointeur Affectation char machaine[10]= {'B','o','n','j','o','u','r','\0'}; char machaine[10]= "Bonjour"; char *p = "Bonjour"; char machaine[10]; machaine = "Bonjour";// machaine est un pointeur constant char p; p = "Bonjour";//c'est bon B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Copie des chaînes On les copie comme des tableaux ordinaires machaine 'B' 'o' 'n' 'j' 'u' 'r' '\0' void chainecop(char *a, const char *de){ int i; for (i=0; de[i] !='\0';i++) a[i]=de[i]; a[i]='\0'; } void chainecop(char *a, const char *de){ while (*de !='\0') *a++ = *de++; *a ='\0'; } B.Shishedjiev - Informatique II

Entrée-sortie des chaînes La fonction gets(chaîne) Lit des caractères jusqu'à la fin de la ligne la fin de fichier soit atteint et ajoute un '\0' et les stock dans la chaîne (elle être assez grande pour stocker tous les caractères lus). La fonction fgets(chaîne,nombre_max_de_char, fichier) Le fichier c'est stdin La fonction puts(chaîne) Affiche des caractères de la chaîne (les caractères jusqu'au '\0') sur stdout. La fonction scanf on utilise la spécification %s. On peut limiter le nombre des caractères lus. La fonction ajoute '\0'. La fonction printf B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Exemple #include <stdio.h> void main (void) { char ch1[50]; char ch2[10]; int i; scanf("%s", ch1); puts(ch1); printf("%s\n",ch1); gets(ch1); puts(ch1); fgets(ch1,50,stdin); scanf("%5s%d",ch2,&i); printf("|%s| |%d|\n",ch2,i); printf("|%5.2s||%3d|\n",ch2,i); } scanf ne lit pas les caractères blancs gets lit tous jusqu'à la fin de la ligne C'est une chaine de caracteres C'est une chaine de caracteres Une autre chaine de caracteres abcd123 |abcd1| |23| | ab|| 23| fgets n'élimine pas la fin de la ligne B.Shishedjiev - Informatique II

Les fonctions standard La longueur int strlen(char*) – string.h Fonctions de conversion int atoi(char*) – stdlib.h de chaîne dans un entier long atol(char*) – stdlib.h de chaîne dans un entier long double atof(char*) – stdlib.h de chaîne dans un réel double précision char *itoa(int value, char *string, int radix) – stdlib.h d'une valeur entière dans une chaîne int toupper(int ch) – ctype.h en majuscule int tolower(int ch) – ctype.h en minuscule B.Shishedjiev - Informatique II

Les fonctions standard Concaténation et copie char *strcat(char *dest, const char *src) – string.h colle une copie de src au dest char *strncat(char *dest, const char *src, size_t maxlen) char *stpcpy(char *dest, const char *src) – string.h copie src au dest char *strncpy(char *dest, const char *src, size_t maxlen) Comparaison int strcmp(const char *s1, const char *s2) – string.h int strncmp(const char *s1, const char *s2, size_t maxlen) Comparer les s1 et s2. Le résultat est : -1 – s1>s2, 0 – s1=s2, 1 – s1<s2 int stricmp(...), int strincmp(...) – compare les chaînes ignorant la différence entre majuscules et minuscules B.Shishedjiev - Informatique II

Les fonctions standard Recherche char *strchr(const char *s, int c) – string.h cherche la 1-ère occurrence de c en s. Le résultat est pointeur vers l'occurrence ou NULL si c n'existe pas char *strrchr(const char *s, int c) cherche la dernière occurrence de c en s. char *strstr(const char *s1, const char *s2) cherche la 1-ère occurrence de s2 en s1 Fonctions de classification – ctype.h int isalpha(int c) int isdigit(int c) int isspace(int c) int isupper(int c) int islower(int c) B.Shishedjiev - Informatique II

Insérer et supprimer des caractères Dans une autre chaîne supprimer – pourquoi le résultat est parmi les paramètres? Mémoire 'B' c: 'B' '?' b: 'o' 'o' '?' 'n' '?' 'n' 'j' '\0' 'u' '?' 'o' char * strdela(char *dest, char *src, int from, int n){ if (from > strlen(src)) return src; strncpy(dest,src,from); dest[from]='\0'; strcat(dest, src+from+n); return dest; } ... strdela(c,b.3.2); '?' 'r' src+ from +n 'u' '\0' '?' 'r' '?' '\0' '?' ? ? ? ? dest ? @ ? @ src ? 3 from n 2 ? B.Shishedjiev - Informatique II

Insérer et supprimer des caractères Mémoire Dans une autre chaîne insérer 'B' c: '?' 'B' b: 'o' 'o' '?' char* insera(char *dest, char *src,int from, char *ins){ char *p=src+from; int i; if (from > strlen(src)) return dest; for(i=0;i<from;i++)dest[i]=src[i]; // ou strncpy(dest,src,from) dest[from]='\0'; strcat(dest,ins); strcat(dest,p); return dest; } ... insera(c,b,3,d); 'n' 'n' '?' 'u' '\0' '?' p 'j' 'r' 'o' '?' '\0' '\0' 'u' '?' ? 'r' '?' '\0' '\0' '?' ? ? ? ? ? @ dest 'j' 'o' @ ? src '\0' 3 ? from d: ins @ ? B.Shishedjiev - Informatique II

Insérer et supprimer des caractères Mémoire En place suppression 'B' b: 'o' 'n' char * strdel(char *s, int from, int n){ if (from > strlen(s)) return s; if (from + n > strlen(s)) n = strlen(s) - from; strcpy(s+from, s+from +n); return s; } ... strdel(b,3,2); s+from 'j' 'u' 'r' 'o' s+from+n '\0' 'u' 'r' '\0' ? ? s ? @ from 3 ? n ? 2 B.Shishedjiev - Informatique II

Insérer et supprimer des caractères Mémoire En place insertion 'B' b: 'o' 'n' 'j' 'u' char* inser(char *dest, int from, char *src){ char *p=dest+from; char *p1 = p+strlen(src); int i; if (from > strlen(dest)) return dest; for(i=strlen(p);i>=0;i--)p1[i]=p[i]; strncpy(p,src,strlen(src)); return dest; } ... inser(b,3,c); 'r' 'o' '\0' 'u' ? 'r' '\0' ? ? ? c: ‘\0’ ‘o’ ‘j’ s ? @ from ? 3 src ? @ p @ B.Shishedjiev - Informatique II p1 @

B.Shishedjiev - Informatique II Exemple - palindrome Palindrome – un groupe de mots qui a le même sens quand il est lu dans les deux directions. radar Elu par cette crapule Esope reste ici et se repose Vérifier si un texte est un palindrome début s, sn Eliminer les caractères de ponctuation et convertit les lettres en minuscules Lire s Vérifier si s est un palindrome fin B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Exemple - palindrome Préparation i,j void prep(d,s) i=j=0 i<strlen(s) d[j]=tolower(s[i]) j++ s[i] est lettre i++ oui non fin void prep(char *d, char*s){ int i,j; for (i=j=0; i <strlen(s);i++){ if (isalpha(s[i])){ d[j]=tolower(s[i]); j++; // d[j++] = tolower(s[i]); } d[j]='\0'; B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Exemple - palindrome Vérification i,j int pal(s) i=0; j=strlen(s)-1 i<j && s[i]==s[j] i++, j-- return i>=j oui non fin 'r' 'a' 'd' '\0' 1 2 3 4 5 i j int pal(char *s){ int i,j; for (i=0, j=strlen(s)-1; i<j && s[i]==s[j]; i++,j--); return i>=j; } B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Tableaux de chaînes Différentes présentations Tableau bidimensionnel (rectangulaire) On peut modifier les chaînes, mais pas leur ordre. char tc[3][7]= {"un","deux","trois"}; tc: 'u' 'n' '\0' 'd' 'e' 'x' 't' 'r' 'o' 'i' 's' tc[0][1] = 't'; strcat(tc[0],tc[1]); B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Tableaux de chaînes Différentes présentations Tableau de pointeurs vers chaînes constantes On peut modifier les pointeurs, mais pas les caractères des chaînes originales char *tc[]= {"un","deux","trois"}; tc: 'u' 'n' '\0' 'd' 'e' 'x' 't' 'r' 'o' 'i' 's' tc[2] = "quatre"; tc[0]= tc[1]; B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Tableaux de chaînes Différentes présentations Présentation mixte char tc[3][7]= {"un","deux","trois"}; char *tp[] = {tc[0],tc[1],tc[2]}; char mot1[20],mot2[25]; char *tab[]={mot1,mot2} tc: tab: mot1: tp: 'u' 'n' '\0' 'd' 'e' 'x' 't' 'r' 'o' 'i' 's' mot2: B.Shishedjiev - Informatique II

Exemple – séparer les mots Lire un texte et mettre tous les mots dans un tableau Un mot? – Suite de lettres, avec un tiré éventuellement début s, sn Séparer le mot suivant et le mémoriser dans l'élément suivant du tableau. Lire s Afficher les mots fin Y a-t-il encore? oui non typedef char ligne[100]; typedef char mot[MOTLEN]; ... ligne tex[MAXLIGNES];//le texte mot dict[MAXMOTS];//le tableau B.Shishedjiev - Informatique II

Exemple – séparer les mots char* motsuiv(s, mots) p=mots *p='\0' !fin && *s n'est pas lettre S++ return s oui non fin *s est dans le mot *p=*s S++,p++ Séparer le mot suivant d'une ligne char* prends_mot_suivant( char *source, mot mots){ char *p = mots; *p = '\0'; while ( *source != '\0' && ! isalpha(*source)) source++; if ( *source == '\0') return NULL; while (isalpha(*source) || *source =='-') *p++ = *source++; return source; } non B.Shishedjiev - Informatique II

Exemple – séparer les mots cl,n int sep(t, d, nl,maxmot) l=0,n=0 l<nl cl=t[l] return s oui non fin y a-t-il des mots cl=motsuiv(cl,d[n]) n++ l++ Séparer les mots int separer_mots(ligne texte[],mot dict[], const int nl, const int maxmot){ char *curligne; int l, n=0; for (l=0; l<nl; l++) { curligne = texte[l]; while (n<maxmot && curligne !=NULL && *curligne != '\0'){ if ((curligne=prends_mot_suivant ( curligne,dict[n])) != NULL) n++; }//while }//for return n; } B.Shishedjiev - Informatique II

Exemple – trier les mots void trie_mots(char *dict[], const int n){ // trie les mots a la boule char *t; int i,exch; do{ exch = 0; for (i=1;i<n;i++) { if (strcmp(dict[i-1],dict[i])>0){ exch =1; t =dict[i-1]; dict[i-1]=dict[i]; dict[i]=t; } }while (exch); d m u r '\0' e s t v j o B.Shishedjiev - Informatique II