Académique Documents
Professionnel Documents
Culture Documents
1. Déclaration et mémorisation
Déclaration
Exemples
Espace à réserver
Lors de la déclaration, nous devons indiquer l'espace à réserver en mémoire pour le stockage de la
chaîne.
La représentation interne d'une chaîne de caractères est terminée par le symbole '\0' (NUL). Ainsi,
pour un texte de n caractères, nous devons prévoir n+1 octets.
Mémorisation
* Les chaînes de caractères constantes (string literals) sont indiquées entre guillemets. La chaîne de
caractères vide est alors: ""
* Dans les chaînes de caractères, nous pouvons utiliser toutes les séquences d'échappement définies
comme caractères constants:
En général, les tableaux sont initialisés par l'indication de la liste des éléments du tableau entre
accolades:
1
char CHAINE[] = {'H','e','l','l','o','\0'};
Pour le cas spécial des tableaux de caractères, nous pouvons utiliser une initialisation plus confortable
en indiquant simplement une chaîne de caractère constante:
Lors de l'initialisation par [], l'ordinateur réserve automatiquement le nombre d'octets nécessaires
pour la chaîne, c.-à-d.: le nombre de caractères + 1 (ici: 6 octets). Nous pouvons aussi indiquer
explicitement le nombre d'octets à réserver, si celui-ci est supérieur ou égal à la longueur de la chaîne
d'initialisation.
Exemples
L'accès à un élément d'une chaîne de caractères peut se faire de la même façon que l'accès à un
élément d'un tableau. En déclarant une chaîne par:
char A[6];
nous avons défini un tableau A avec six éléments, auxquels on peut accéder par:
Exemple
2
5. Précédence alphabétique et lexicographique
Précédence alphabétique des caractères
La précédence des caractères dans l'alphabet d'une machine est dépendante du code de caractères
utilisé. Pour le code ASCII, nous pouvons constater l'ordre suivant:
. . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .
Relation de précédence
car dans l'alphabet de la machine, le code du caractère '0' (ASCII: 48) est inférieur au code du
caractère 'Z' (ASCII: 90).
b) La chaîne A = "a1a2a ... ap" (p caractères) précède lexicographiquement la chaîne B = "b1b2 ... bm"
(m caractères) si l'une des deux conditions suivantes est remplie:
2) 'a1' = 'b1' et
Exemples
Remarque
En tenant compte de l'ordre alphabétique des caractères, on peut contrôler le type du caractère
(chiffre, majuscule, minuscule).
Exemples
3
if (C>='a' && C<='z') C = C-'a'+'A';
Exemples
scanf avec le spécificateur %s permet de lire un mot isolé à l'intérieur d'une suite de données du
même ou d'un autre type.
scanf avec le spécificateur %s lit un mot du fichier d'entrée standard stdin et le mémorise à
Effet:
l'adresse qui est associée à %s.
Exemple
char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);
Remarques importantes
Comme le nom d'une chaîne de caractères est le représentant de l'adresse du premier caractère de la
chaîne, il ne doit pas être précédé de l'opérateur adresse '&' !
gets est idéal pour lire une ou plusieurs lignes de texte (p.ex. des phrases) terminées par un retour à
la ligne.
Exemple
4
6.2. Les fonctions de <string>
Fonctions pour le traitement de chaînes de caractères
strlen(<s>) fournit la longueur de la chaîne sans compter le '\0' final
strcpy(<s>, <t>) copie <t> vers <s>
strcat(<s>, <t>) ajoute <t> à la fin de <s>
compare <s> et <t> lexicographiquement et fournit un
strcmp(<s>, <t>)
résultat:
négatif si <s> précède <t>
si <s> est égal à
zéro
<t>
positif si <s> suit <t>
strncpy(<s>, <t>,
copie au plus <n> caractères de <t> vers <s>
<n>)
strncat(<s>, <t>, ajoute au plus <n> caractères de <t> à la fin de <s>
<n>)
Les trois fonctions définies ci-dessous correspondent au standard ANSI-C et sont portables. Le
symbole <s> peut être remplacé par :
Les fonctions de <ctype> servent à classifier et à convertir des caractères. Les symboles nationaux (é,
è, ä, ü, ß, ç, ...) ne sont pas considérés. Les fonctions de <ctype> sont indépendantes du code de
caractères de la machine et favorisent la portabilité des programmes. Dans la suite, <c> représente
une valeur du type int qui peut être représentée comme caractère.
Les fonctions de classification suivantes fournissent un résultat du type int différent de zéro, si la
condition respective est remplie, sinon zéro.
5
retourne une valeur différente de zéro,
La fonction:
Les fonctions de conversion suivantes fournissent une valeur du type int qui peut être représentée
comme caractère; la valeur originale de <c> reste inchangée:
Déclaration
réserve l'espace en mémoire pour 7 mots contenant 9 caractères (dont 8 caractères significatifs).
Initialisation
Lors de la déclaration il est possible d'initialiser toutes les composantes du tableau par des chaînes de
caractères constantes:
char JOUR[7][9]= {"lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi",
"dimanche"};
6
Mémorisation
Les tableaux de chaînes sont mémorisés ligne par ligne. La variable JOUR aura donc besoin de 7*9*1
= 63 octets en mémoire.
Il est possible d'accéder aux différentes chaînes de caractères d'un tableau, en indiquant simplement
la ligne correspondante.
Exemple
affichera la phrase:
Affectation
L'attribution d'une chaîne de caractères à une composante d'un tableau de chaînes se fait en général
à l'aide de la fonction strcpy:
Exemple
La commande
strcpy(JOUR[4], "Friday");
changera le contenu de la 5e composante du tableau JOUR de "vendredi" en "Friday".
Evidemment, il existe toujours la possibilité d'accéder directement aux différents caractères qui
composent les mots du tableau.
Exemple
L'instruction
7
va afficher les premières lettres des jours de la semaine:
l m m j v s d
Exercices d'application
Exercice 2
Ecrire un programme qui lit 5 mots, séparés par des espaces et qui les affiche ensuite dans une ligne,
mais dans l'ordre inverse. Les mots sont mémorisés dans 5 variables M1, ... ,M5.
Exemple
Exercice 3
Ecrire un programme qui lit une ligne de texte (ne dépassant pas 200 caractères) la mémorise dans
une variable TXT et affiche ensuite:
a) la longueur L de la chaîne.
Exercice 4
Ecrire un programme qui lit un texte TXT (de moins de 200 caractères) et qui enlève toutes les
apparitions du charactère 'e' en tassant les éléments restants. Les modifications se feront dans la
même variable TXT.
Exemple:
8
Exercice 5
Ecrire un programme qui demande l'introduction du nom et du prénom de l'utilisateur et qui affiche
alors la longueur totale du nom sans compter les espaces. Employer la fonction strlen.
Exemple:
Exercice 6
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2, les compare
lexicographiquement et affiche le résultat:
Exemple:
Exercice 7
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2 et qui copie la première moitié de
CH1 et la première moitié de CH2 dans une troisième chaîne CH3. Afficher le résultat.
Exercice 8
Ecrire un programme qui lit un verbe régulier en "er" au clavier et qui en affiche la conjugaison au
présent de l'indicatif de ce verbe. Contrôlez s'il s'agit bien d'un verbe en "er" avant de conjuguer.
Utiliser les fonctions gets, puts, strcat et strlen.
Exemple:
Verbe : fêter
je fête
tu fêtes
il fête
nous fêtons
vous fêtez
ils fêtent