Telechargé par dekiko1916

Chaine de Cacrtères en C cours

publicité
Caractères
Chaines de Caractères
TP
Programmation en C: // Les caractères et chaines de caractères
Saadi Mostafa
ENSA
Khouribgha Maroc
29/11/2017
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Introduction
Représentation : par un code de caractère :
historiquement : sur 7 bits ⇒ 128 codes,
de nos jours : sur 8 bits ⇒ 256 codes.
Les caractères regroupent :
codes 0 à 127 : standard ASCII :
32 à 126 : 95 symboles affichables,
0 à 31 et 127 : 33 caractères de contrôle,
codes 128 à 255 : symboles affichables étendus :
de nombreux standard existent :
latin1 : ISO pour l’Europe de l’ouest,
Mac-Roman : Europe de l’ouest sur les Macintoshs,
UTF-8 : standard universel Unicode,
En C : type char.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Arithmétiques sur les caractères
Remarques
char est un entier
l’ASCII est organisé en plages logiques (A à Z, etc.)
=⇒ on peut faire de l’arithmétique sur les caractères.
Exemple : mettre en majuscule
char enMajuscule(char c)
{
if ( c >= ’a’ & & c <= ’z’ ) return c - ’a’ + ’A’;
else return c;
}
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Représentation des chaı̂nes de caractères
Chaı̂ne (string) = suite de caractères terminée par le caractère \ 0.
En C, pas de type chaı̂ne spécifique :
déclaration : on utilise un tableau de char : char[],
en argument : on passe un pointeur dans un tableau : char*.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Déclaration des chaines
Exemples
char buf[1024] : Dangereux ça terminent pas par \0
char cc[] = { ’H’, ’e’, ’l’, ’l’, ’o’, ’ !’, 0};
char toto[4] = { ’H’, ’i’, ’\ 0’ };
char titi[4] = { ’H’, ’i’ };
Remarque
Rappel des règles sur les initialisations de tableaux :
avec [], la taille est calculée automatiquement,
sinon, les initialiseurs manquants sont mis à 0.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Déclaration et chaines
Initialisation par une chaı̂ne littérale entre ” ”
Examples
char cc[] = ”Hello!”;
char toto[4] = ”Hi”;
La chaine de caractère est un tableau de caractère, on peut la manipuler avec
un pointeur comme les autres tableaux.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Utilisation des pointeurs
Pointeur
On peut attribuer l’adresse d’une chaı̂ne de caractères constante à un pointeur
sur char:
char *C;
C = ”Ceci est une chaı̂ne de caractères constante”;
Remarque
Il existe une différence importante entre les deux déclarations:
char A[] = ”Bonjour !”; /* un tableau */
A est un tableau qui a exactement la grandeur pour contenir la chaı̂ne de
caractères et la terminaison ’\0’. Les caractères de la chaı̂ne peuvent être
changés, mais le nom A va toujours pointer sur la même adresse en mémoire.
char *B = ”Bonjour !”; /* un pointeur */
B est un pointeur qui est initialisé de façon à ce qu’il pointe sur une chaı̂ne de
caractères constante stockée quelque part en mémoire. Le pointeur peut être
modifié et pointer sur autre chose. La chaı̂ne constante peut être lue
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Exemple
Exemple 1
char *A = ”Petite chaı̂ne”;
char *B = ”Deuxième chaı̂ne un peu plus longue”;
A = B;
Maintenant A et B pointent sur la même chaı̂ne; la ”Petite chaı̂ne” est perdue
Exemple 2
char
char
char
A=
C=
A[45] = ”Petite chaı̂ne”;
B[45] = ”Deuxième chaı̂ne un peu plus longue”;
C[30];
B; /* ERREUR !!! */
”Bonjour !”; /* ERREUR !!! */
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Résumé
Utilisons des tableaux de caractères pour déclarer les chaı̂nes de caractères
que nous voulons modifier.
Utilisons des pointeurs sur char pour manipuler des chaı̂nes de caractères
constantes (dont le contenu ne change pas).
Utilisons de préférence des pointeurs pour effectuer les manipulations à
l’intérieur des tableaux de caractères.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Passage par paramètre
Les chaı̂nes sont passées aux fonctions par référence sous forme de pointeur
vers le premier caractère.
Type de l’argument :
char* si la chaı̂ne risque d’être modifiée par la fonction,
const char* si la chaı̂ne n’est pas modifiée.
Exemple
int longueur(const char* s) {
int i = 0;
while (s[i]) i++;
return i;
}
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Autre exemple
char enMajuscule(char c)
{
if ( c >= ’a’ & & c <= ’z’ )
return c - ’a’ + ’A’;
else
return c;
}
void chaineEnMajuscule(char* s)
{
for ( ; *s; s++ )
*s = enMajuscule(*s);
}
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Fonctions sur les chaines
Fonctions
La bibliothèque ¡string.h¿ contient plusieurs fonctions pour manipuler des
chaines de caractères , nous avons par exemple :
int strlen (const char * str) : longueur d’une chaı̂ne
int strcmp(const char * chaine1, const char * chaine2) : compare deux
chaı̂nes lexicographiquement. Elle renvoie une valeur négative si la
première chaine est plus petite que la deuxième, zéro si elles sont égaux et
une valeur positive si la première est plus grande.
char * strcpy(char * dest, const char * src) : copie de chaı̂ne src dans la
chaine dest et renvoie l’adresse de dest.
char * strcat(char * dest, const char * src) : concaténation deux chaı̂nes
et renvoie l’adresse de la nouvelle chaine.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Caractères
Chaines de Caractères
TP
Exercices
Exercice 1
Programmez une fonction qui prend une chaı̂ne de caractères en argument et
renvoie 1 si c’est un palindrome (mot symétrique, qui s’écrit de la même
manière de gauche à droite et de droite à gauche).
Exercice 2
Programmez une fonction :// void myStrcat(char *dest, const char *src); qui
simule le comportement de strcat.// Que fait votre fonction si dest et src
pointent dans le même tableau ?
Exercice 3
Programmez une fonction :// void insert(char ∗dest, const char∗src, int pos);
qui insère src à la position pos de dest. Les caractères de dest à partir de la
position pos sont donc décalés de la longueur de src.// La fonction suppose
que src et dest ne pointent pas dans le même tableau et vérifie que pos est
compris entre 0 et strlen(dest) inclus.
Saadi Mostafa
Programmation en C: // Les caractères et chaines de caractères
Téléchargement