36
8PRO100 Éléments de programmation Les chaînes de caractères

8PRO100 Éléments de programmation Les chaînes de caractères

Embed Size (px)

Citation preview

Page 1: 8PRO100 Éléments de programmation Les chaînes de caractères

8PRO100

Éléments de programmation

Les chaînes de caractères

Page 2: 8PRO100 Éléments de programmation Les chaînes de caractères

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 ne peuvent manipuler que des séquences de bits. les caractères doivent être encodés en binaire.

Un des codes les plus utilisés est le code ASCII.Chaque caractère est encodé à l ’aide de 8 bits: ce qui donne 256 possibilités.

Page 3: 8PRO100 Éléments de programmation Les chaînes de caractères

Code ASCII

Page 4: 8PRO100 Éléments de programmation Les chaînes de caractères

Code ASCII étendu

Page 5: 8PRO100 Éléments de programmation Les chaînes de caractères

Les constantes de type caractère

En C une constante de type caractère est un nombre entier écrit sous la forme d’un caractère entre apostrophes, comme ‘a’.

La valeur d’une constante de type caractère est égale à la valeur du caractère d’après le jeu de caractère de la machine (ex. ASCII).

Exemples:

‘a’ vaut 97‘A’ vaut 65‘B’ vaut 66‘0’ vaut 48

Page 6: 8PRO100 Éléments de programmation Les chaînes de caractères

Les séquences d’échappement

‘\a’ caractère d’alerte (sonnerie, bell)‘\b’ retour en arrière (backspace)‘\f’ saut de page (formfeed)‘\n’ fin de ligne (newline)‘\r’ retour de chariot (carriage return)‘\t’ tabulation horizontale‘\v’ tabulation verticale‘\\’ backslash‘\?’ point d’interrogation‘\’’ apostrophe‘\” ’ guillemet‘\ooo’ nombre octal‘\xhh’ nombre hexadécimale

Page 7: 8PRO100 Éléments de programmation Les chaînes de caractères

Les constantes de type chaîne

Un constante de type chaîne est une séquence de caractères, éventuellement vide, placée entre guillemets.

Exemple:"Je suis une chaine "

"Bonjour groupe!\n"

Note: Les guillemets ne font pas partie de la chaîne.

"\"Je suis one chaine\""

Page 8: 8PRO100 Éléments de programmation Les chaînes de caractères

Les variables de type caractère

Pour declarer une variable de type char, on procède de la façon suivante:

char c1; /* c1 est une variable de type caractère */char c2 = ‘a’; /* c2 est une variable de type caractère

initialisée à ‘a’ */

Page 9: 8PRO100 Éléments de programmation Les chaînes de caractères

Les entrées et sorties

#include <iostream.h> /* fichier d’en-tête pour le C++ */main(){char c;cin >> c;cout << c;}

#include <stdio.h> /* fichier d’en-tête pour le C */main(){char c;c = getchar();putchar(c);}

Page 10: 8PRO100 Éléments de programmation Les chaînes de caractères

Les entrées et sorties

int getchar(void)Retourne le caractère suivant (converti en un int).retourne EOF si la fin du fichier est atteinte ou si une erreur survient.

int putchar(char c)Écrit le caractère c.Retourne le caractère écrit ou bien EOF en cas d’erreur.

Le fichier d’en-tête stdio.h:

Contient la déclaration des fonctions standards d’entrée et de sortie (en C)Contient aussi la définition de EOF (End of file).

Page 11: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 1: Copier des fichiers

#include <stdio.h>

/* copie l’entrée sur la sortie, première version */main(){ int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); }}

Page 12: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 1: Copier des fichiers

#include <stdio.h>

/* copie l’entrée sur la sortie; première version*/main(){ int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); }}

Pourquoi un int?

Page 13: 8PRO100 Éléments de programmation Les chaînes de caractères

Qu'est-ce que EOF?

Supposons que le fichier contienne trois entiers : 32 8 15

Page 14: 8PRO100 Éléments de programmation Les chaînes de caractères

Qu'est-ce que EOF?

Supposons que le fichier contienne trois entiers : 32 8 15

Page 15: 8PRO100 Éléments de programmation Les chaînes de caractères

Qu'est-ce que EOF?

Supposons que le fichier contienne trois entiers : 32 8 15

Page 16: 8PRO100 Éléments de programmation Les chaînes de caractères

Qu'est-ce que EOF?

Supposons que le fichier contienne trois entiers : 32 8 15

Page 17: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 1: Copier des fichiersLa valeur retourné par getchar() peut être

un des 256 caractères ASCII

OU

la valeur EOF

La fonction getchar() peut donc retourner 257 valeurs possibles.

Mais un char est un entier de 8 bits et ne peut donc représenter que 256 valeurs possibles.

On doit donc utiliser plus de bits (et donc un int) pour faire la différence entre un caractère et EOF.

Page 18: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 1: Copier des fichiers

Exemple:Sur SUNENS un int est un entier de 32 bits et EOFs’écrit en binaire de la façon suivante:

11111111111111111111111111111111

32 bits

Losrque l’on met EOF dans une variable de type char on nemet que les 8 premiers bits, c’est-à-dire 11111111 = 255

Le caractère dont la valeur est 255 est: ÿ

Page 19: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 1: Copier des fichiers

#include <stdio.h>

/* copie l’entrée sur la sortie, seconde version */main(){ int c; while ((c=getchar()) != EOF) putchar(c);}

Page 20: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 2: Compter les caractères

#include <stdio.h>

/* La fonction nbcar compte les caractères en entrée */int nbcar(){ int nc;

nc = 0; while (getchar() != EOF) nc = nc + 1; return nc;}

Page 21: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 3: Compter les lignes

#include <stdio.h>

/* La fonction nblignes compte les lignes en entrée */int nblignes(){ int c, nl;

nl = 0; while ((c=getchar()) != EOF) if (c == ‘\n’) /* En fait on compte les nombre de */ nl = nl + 1; /* changement de lignes */ return nl;}

Page 22: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 4: Compter les mots#include <stdio.h>#define DEDANS 1 /* à l’intérieur d’un mot */#define DEHORS 0 /* à l’extérieur d’un mot */

/* La fonction nbmots compte les mots en entrée */int nbmots(){

int c, nm, etat;

nm = 0;etat = DEHORS;while ( (c=getchar()) != EOF )

if ( (c == ‘\n’) || (c == ‘ ‘) || (c == ‘\t’) ) etat = DEHORS;

else if (etat == DEHORS) { etat = DEDANS;

nm = nm + 1; }return nl;

}

Page 23: 8PRO100 Éléments de programmation Les chaînes de caractères

ctype.h

Le fichier d’en-tête ctype.h contient la déclaration de fonctions destinées à tester les caractères:

• isdigit(char c) retourne 1 si c est un chiffre, 0 sinon• is lower(char c) retourne 1 si c est une lettre minuscule, 0 sinon • isupper(char c) retourne 1 si c est une lettre majuscule, 0 sinon • isalpha(char c) retourne 1 si c est une lettre, o sinon• isspace(char c) retourne 1 si c est un character d'espacement, 0 sinon• et plusieurs autres.

Page 24: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 5: isdigit(c)

#include <stdio.h>

int isdigit(char c){ return ( (c >= ‘0’) && (c <=‘9’) );}

Page 25: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 6: islower(c)

#include <stdio.h>

int islower(char c){ return ( (c >= ‘a’) && (c <=‘z’) );}

Page 26: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 7: isupper(c)

#include <stdio.h>

int isupper(char c){ return ( (c >= ‘A’) && (c <=‘Z’) );}

Page 27: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 8: isalpha(c)

#include <stdio.h>

int isalpha(char c){ return ( islower(c) || isupper(c));}

Page 28: 8PRO100 Éléments de programmation Les chaînes de caractères

Remarques

Les exemples 5 à 8 pourraient ne pas fonctionner correctement sur un système utilisant un code autre que ASCII

Dans ctype.h, ces fonctions prennent un int comme paramètre.

Page 29: 8PRO100 Éléments de programmation Les chaînes de caractères

Les chaînes de caractères

En C il n’y a pas de variable de type chaîne de caractères.

Une chaîne de caractère est un tableau de caractères se terminant par le caractère \0 (le caractère nul ayant la valeur 0)

Ainsi la chaîne “Bonjour groupe!” serait représentée de la façon suivante:

B o rn j uo gr

0 1 2 3 4 5 6 7 8 9

o u p e ! \0

10 11 12 13 14 15

Page 30: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 9: Lire une ligne

#include <stdio.h>

/* lireligne: lit une ligne, la met dans s et retourne sa longueur qui doit être au plus lim-1 */int lireligne( char s[], int lim) { int c, i;

for (i=0; i< lim-1 && (c=getchar())!=EOF && c!= ‘\n’; i=i+1) s[i] = c;

if (c==‘\n’) {s[i]=c;i = i + 1;

} return i; }

Page 31: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 10: Copier une chaîne

#include <stdio.h>

/* copier: copie le tableau ‘de’ dans le tableau ‘vers’ ; on supose que le tableau vers est assez long */void copie( char de[], char vers[]) { int i;

i = 0; while ( (vers[i] = de[i]) != ‘\0’)

i = i + 1;}

Page 32: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 11: Comparer 2 chaînes#include <stdio.h>

/* compare: Retourne -1, 0, ou 1 selon que chaine1 est lexicographiquement plus petite, égale ou plus grandeque chaine2.

void compare( char chaine1[], char chaine2[]) { int i;

i = differe_ou(chaine1, chaine2); /* differe_ou retourne la première position où chaine1 et chaîne2 diffèrent. */

if ( chaine1[i] < chaine2[i] ) return -1;

else if ( chaine1[i] > chaine2[i] ) return 1;

else return 0;

}

Page 33: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 11: Comparer 2 chaînes

#include <stdio.h>

/* differe_ou: Retourne la première position où chaine1 et chaîne2 diffèrent. Retourne la position du caractère ‘\0’ si les

deux chaînes sont égales. */int differe_ou( char chaine1[], char chaine2[]) { int i;

i = 0; while ( chaine1[i] != ‘\0’ && chaine1[i] = =chaine2[i])

i = i + 1; return i;}

Page 34: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 12: Initialiser une chaîne

#include <stdio.h>

char mot1[80]="bonjour";char mot2[80]={'b', 'o', 'n', 'j', 'o', 'u', 'r', '\0'};

for (i=0; mot1[i]; i++) putchar(mot1[i]);

for (i=0; mot2[i]; putchar(mot2[i++]));

Page 35: 8PRO100 Éléments de programmation Les chaînes de caractères

string.h

Le fichier d’en-tête string.h contient des déclarations de fonctions permettant de manipuler des chaînes de caractères.

char* strcpy(char[], char[]) copie la première chaine dans la secondechar* strcat (char[], char[]) concatène les deux chaînesint strcmpr (char[], char[]) compare deux chaînesint strlen(char[]) retourne la longueur d’une chaîne

et beaucoup d’autres.

Page 36: 8PRO100 Éléments de programmation Les chaînes de caractères

Exemple 13: chercher un mot

#include <stdio.h>

char mot1[80]="bonjour";char mot2[80]={'b', 'o', 'n', 'j', 'o', 'u', 'r', '\0'};

for (i=0; mot1[i]; i++) putchar(mot1[i]);

for (i=0; mot2[i]; putchar(mot2[i++]));