Professional Documents
Culture Documents
Dans un programme informatique, les chanes de caractres servent stocker les informations non numriques comme par exemple une liste de nom de personne ou des adresses.
Il n'existe pas de type spcial chane ou string en C. Une chane de caractres est traite comme un tableau une dimension de caractres (vecteur de caractres). Il existe quand mme des notations particulires et une bonne quantit de fonctions spciales pour le traitement de tableaux de caractres.
Exemples dinitialisation
char MACHAINE[ ] = Hello; char MACHAINE[6] = Hello; char MACHAINE[ ] = {H,e,l,l,o,\0}; char MACHAINE[8] = Hello; par contre: char MACHAINE[5] = Hello; donnera une erreur lexcution char MACHAINE[4] = Hello; donnera une erreur la compilation.
A savoir (1)
* Les chanes de caractres constantes (string literals) sont indiques entre guillemets. La chane de caractres vide est alors: "" * Dans les chanes de caractres, nous pouvons utiliser toutes les squences d'chappement dfinies comme caractres constants: "Ce \ntexte \nsera rparti sur 3 lignes." * Le symbole " peut tre reprsent l'intrieur d'une chane par la squence d'chappement \. * Le symbole ' peut tre reprsent l'intrieur d'une liste de caractres par la squence d'chappement \' : {'L','\'','a','s','t','u','c','e','\0'}
A savoir (2)
* Plusieurs chanes de caractres constantes qui sont spares par des signes d'espacement (espaces, tabulateurs ou interlignes) dans le texte du programme seront runies en une seule chane constante lors de la compilation: "un " "deux" " trois sera valu "un deux trois" => il est possible de dfinir de trs longues chanes de caractres constantes en utilisant plusieurs lignes dans le texte du programme.
Prcdence et oprations
Une chane de caractres est une variable : on peut utiliser des oprations logiques et mathmatiques. La prcdence des caractres dans l'alphabet d'une machine est dpendante du code de caractres utilis. Pour le code ASCII, nous pouvons constater l'ordre suivant: . . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . . Les symboles spciaux (' ,+ ,- ,/ ,{ ,] , ...) et les lettres accentues ( , , , , ...) se trouvent rpartis autour des trois grands groupes de caractres (chiffres, majuscules, minuscules). Leur prcdence ne correspond aucune rgle d'ordre spcifique.
Prcdence et oprations
Prcdence alphabtique des caractres induit une relation de prcdence 'est infrieur ' sur l'ensemble des caractres. (idem pour les autres relations logiques) Ainsi, on peut dire que '0' est infrieur 'Z' et noter '0' < 'Z Ceci est possible car dans l'alphabet de la machine, le code du caractre '0' (ASCII: 48) est infrieur au code du caractre 'Z' (ASCII: 90). Exemples "ABC" prcde "BCD car 'A'<'B' "ABC" prcde "B car 'A'<'B' "Abc" prcde "abc car 'A'<'a' "ab" prcde "abcd car "" prcde "cd" " ab" prcde "ab car ' '<'a'
Tests logiques
En tenant compte de l'ordre alphabtique des caractres, on peut contrler le type du caractre (chiffre, majuscule, minuscule). Exemples if (C>='0' && C<='9') printf("Chiffre\n", C); if (C>='A' && C<='Z') printf("Majuscule\n", C); if (C>='a' && C<='z') printf("Minuscule\n", C); Il est facile, de convertir des lettres majuscules dans des minuscules: if (C>='A' && C<='Z') C = C-'A'+'a'; ou vice-versa: if (C>='a' && C<='z') C = C-'a'+'A';
Tableaux de chanes
Une chane de caractres est un tableau 1 dimension de caractres. On peut galement dfinir des tableaux plusieurs dimensions qui peuvent contenir des mots: char JOUR[7][9] = {lundi , mardi , mercredi , jeudi , vendredi,samedi,dimanche}; et on peut accder ces mots en utilisant la syntaxe suivante: int I=2; printf(Aujourdhui nous sommes %s,JOUR[I]); qui affichera Aujourdhui nous sommes mercredi. pour accder une lettre dans un mot: JOUR[I][j] avec %c pour laffichage.
Fonctions de bibliothque
Des fonctions de traitement des chanes de caractres sont disponibles dans les bibliothques standards:
<stdio.h> : scanf, printf en utilisant %s dans le format attention: scanf prend une adresse en argument (&x), une chane de caractres tant un tableau (ie, ladresse du premier lment), il ny a pas de &. puts: puts(MACHAINE); est quivalent printf("%s\n",TXT); gets: gets(MACHAINE); lit une ligne jusquau retour chariot et remplace le \n par \0 dans laffectation de la chane.
Fonctions de bibliothque
<string>: strlen(<s>) fournit la longueur de la chane sans compter le '\0' final strcpy(<s>, <t>) copie <t> vers <s> strcat(<s>, <t>) ajoute <t> la fin de <s> strcmp(<s>, <t>) compare <s> et <t> lexicographiquement et fournit un rsultat: ngatif si <s> prcde <t> zro si <s> est gal <t> positif si <s> suit <t> strncpy(<s>, <t>, <n>) copie au plus <n> caractres de <t> vers <s> strncat(<s>, <t>, <n>) ajoute au plus <n> caractres de <t> la fin de <s>
Attention:
La nature de tableau dune chane de caractres (ie, ladresse en mmoire du premier lment) interdit des affections du type A= hello en dehors de la phase dinitialisation. char A[ ]=Hello; char A[6]; A= Hello; est correct mais ne lest pas.
Il faut bien copier la chane caractre par caractre ou utiliser la fonction strcpy respectivement strncpy: strcpy(A, "Hello");
Fonctions de bibliothque
<stdlib>: conversion chane -> nombre atoi(<s>) retourne la valeur numrique reprsente par <s> comme int atol(<s>) retourne la valeur numrique reprsente par <s> comme long atof(<s>) retourne la valeur numrique reprsente par <s> comme double (!) Rgles gnrales pour la conversion: * Les espaces au dbut d'une chane sont ignors * Il n'y a pas de contrle du domaine de la cible * La conversion s'arrte au premier caractre non convertible * Pour une chane non convertible, les fonctions retournent zro
Exercices:
Ex 15: calcul de la surface sous une courbe En utilisant une mthode de type Monte-Carlo (cf calcul de Pi), crivez un programme C qui permet de calculer la surface sous une courbe y=f(x) entre les points x1 et x2. x1 et x2 seront entrs par lutilisateur avec un scanf. On considerera que la fonction f(x) est une fonction connue dcrite par la dclaration suivante: float f(float x); Ex 16 : tri direct dun tableau crire un programme qui permet de trier un tableau de nombres rels de faon directe et qui affiche le rsultat.