Les chaînes de caractères



Documents pareils
Algorithmique et Programmation, IMA

Chap III : Les tableaux

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Initiation à la programmation en Python

Chapitre 1 : La gestion dynamique de la mémoire

Rappels Entrées -Sorties

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Utilisation d objets : String et ArrayList

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Bases de programmation. Cours 5. Structurer les données

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Le langage C. Séance n 4

Introduction au langage C

LES TYPES DE DONNÉES DU LANGAGE PASCAL

UE Programmation Impérative Licence 2ème Année


Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

I. Introduction aux fonctions : les fonctions standards

INITIATION A LA PROGRAMMATION

Chapitre 2. Classes et objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Présentation du langage et premières fonctions

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation système de commandes en C

SUPPORT DE COURS. Langage C

Généralités sur le Langage Java et éléments syntaxiques.

Initiation. àl algorithmique et à la programmation. en C

TP 1. Prise en main du langage Python

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Excel 2007 Niveau 3 Page 1

Les débordements de tampons et les vulnérabilités de chaîne de format 1

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours d initiation à la programmation en C++ Johann Cuenin

Premiers Pas en Programmation Objet : les Classes et les Objets

Informatique Générale

Une version javascript sera disponible directement dans le cours prochainement.

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation système I Les entrées/sorties

STAGE IREM 0- Premiers pas en Python

Solutions du chapitre 4

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation en C - Sommaire

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Logiciel de Base. I. Représentation des nombres

Langage Java. Classe de première SI

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

Vecteurs. I Translation. 1. Définition :

1 Lecture de fichiers

Travaux Dirigés n 1 : chaînes de caractères

TD3: tableaux avancées, première classe et chaînes

TP, première séquence d exercices.

TP1 : Initiation à Java et Eclipse

Algorithme. Table des matières

Programmation impérative

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Les structures. Chapitre 3

Conventions d écriture et outils de mise au point

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Plan du cours. Historique du langage Nouveautés de Java 7

Java Licence Professionnelle CISII,

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Une chaîne de caractères est toute suite de caractères placés entre guillemets.

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Langages et Concepts de Programmation Introduction à la programmation en langage C

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

SOMMAIRE. 1. Préambule Le calendrier Trajectoire d un objet lancé Régression linéaire...9

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Introduction à l algorithmique et à la programmation M1102 CM n 3

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Initiation à la Programmation en Logique avec SISCtus Prolog

Langage Éric Guérin 5 octobre 2010

1 Introduction au codage

Le Langage De Description De Données(LDD)

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Codage d information. Codage d information : -Définition-

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Découverte de Python

Jeux de caracte res et encodage (par Michel Michaud 2014)

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

ALGORITHMIQUE ET PROGRAMMATION En C

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programmation en langage C

Programmation par les Objets en Java

Notions de Langage C

Transcription:

Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il n'existe pas de type spécial chaîne ou string en C. Une chaîne de caractères est traitée comme un tableau à une dimension de caractères (vecteur de caractères). Il existe quand même des notations particulières et une bonne quantité de fonctions spéciales pour le traitement de tableaux de caractères.

Déclaration d une chaîne Une chaîne de caractères est un tableau de type char. La déclaration est identique à un tableau normal: char <nom_chaine> [<dimension>] La représentation interne d'une chaîne de caractères est terminée par le symbole '\0' (NULL). Ainsi, pour un texte de n caractères, nous devons prévoir n+1 octets. Malheureusement, le compilateur C ne contrôle pas si nous avons réservé un octet pour le symbole de fin de chaîne; l'erreur se fera seulement remarquer lors de l'exécution du programme...

Initialiser une chaîne de caractères En général, les tableaux sont initialisés par l'indication de la liste des éléments du tableau entre accolades: char MACHAINE[ ] = {'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ères constante: char MACHAINE[ ] = "Hello"; 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 d initialisation 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 à l exécution char MACHAINE[4] = Hello ; donnera une erreur à la compilation.

Chaînes constantes et caractères Attention à la déclaration: Pour la mémorisation de la chaîne de caractères "Hello", C a besoin de six (!!) octets. 'x est un caractère constant, qui a une valeur numérique: Par exemple: 'x' à la valeur 120 dans le code ASCII. "x est un tableau de caractères qui contient deux caractères: la lettre 'x' et le caractère NUL: '\0' 'x est codé dans un octet "x est codé dans deux octets

A savoir (1) * 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: "Ce \ntexte \nsera réparti sur 3 lignes." * Le symbole " peut être représenté à l'intérieur d'une chaîne par la séquence d'échappement \. * Le symbole ' peut être représenté à l'intérieur d'une liste de caractères par la séquence d'échappement \' : {'L','\'','a','s','t','u','c','e','\0'}

A savoir (2) * Plusieurs chaînes de caractères constantes qui sont séparées par des signes d'espacement (espaces, tabulateurs ou interlignes) dans le texte du programme seront réunies en une seule chaîne constante lors de la compilation: "un " "deux" " trois sera évalué à "un deux trois" => il est possible de définir de très longues chaînes de caractères constantes en utilisant plusieurs lignes dans le texte du programme.

Accéder à une chaîne et à ses éléments Une chaîne de caractères est une variable comme une autre pour un programme: on y accède en l appelant par son nom de variable. Une chaîne est un tableau de caractères: pour accéder a ses éléments on suit la logique d un tableau. Exemple: char A[6] = Hello ; -> A[0] contient H, A[1] contient e A[5] contient \0.

Précédence et opérations Une chaîne de caractères est une variable : on peut utiliser des opérations logiques et mathématiques. 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,... Les symboles spéciaux (',+,-,/,{,],...) et les lettres accentuées (é,è,à,û,...) se trouvent répartis autour des trois grands groupes de caractères (chiffres, majuscules, minuscules). Leur précédence ne correspond à aucune règle d'ordre spécifique.

Précédence et opérations Précédence alphabétique des caractères induit une relation de précédence 'est inférieur à' sur l'ensemble des caractères. (idem pour les autres relations logiques) Ainsi, on peut dire que '0' est inférieur à 'Z' et noter '0' < 'Z Ceci est possible 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). Exemples "ABC" précède "BCD car 'A'<'B' "ABC" précède "B car 'A'<'B' "Abc" précède "abc car 'A'<'a' "ab" précède "abcd car "" précède "cd" " ab" précède "ab car ' '<'a'

Tests logiques En tenant compte de l'ordre alphabétique des caractères, on peut contrôler le type du caractère (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 chaînes Une chaîne de caractères est un tableau à 1 dimension de caractères. On peut également définir des tableaux à plusieurs dimensions qui peuvent contenir des mots: char JOUR[7][9] = { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche }; et on peut accéder à ces mots en utilisant la syntaxe suivante: int I=2; printf( Aujourd hui nous sommes %s,jour[i]); qui affichera Aujourd hui nous sommes mercredi. pour accéder à une lettre dans un mot: JOUR[I][j] avec %c pour l affichage.

Fonctions de bibliothèque Des fonctions de traitement des chaînes de caractères sont disponibles dans les bibliothèques standards: <stdio.h> : scanf, printf en utilisant %s dans le format attention: scanf prend une adresse en argument (&x), une chaîne de caractères étant un tableau (ie, l adresse du premier élément), il n y a pas de &. puts: puts(machaine); est équivalent à printf("%s\n",txt); gets: gets(machaine); lit une ligne jusqu au retour chariot et remplace le \n par \0 dans l affectation de la chaîne.

Fonctions de bibliothèque <string>: 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> strcmp(<s>, <t>) compare <s> et <t> lexicographiquement et fournit un résultat: négatif si <s> précède <t> zéro si <s> est égal à <t> positif si <s> suit <t> strncpy(<s>, <t>, <n>) copie au plus <n> caractères de <t> vers <s> strncat(<s>, <t>, <n>) ajoute au plus <n> caractères de <t> à la fin de <s>

Attention: La nature de tableau d une chaîne de caractères (ie, l adresse en mémoire du premier élément) interdit des affections du type A= hello en dehors de la phase d initialisation. char A[ ]= Hello ; char A[6]; A= Hello ; est correct mais ne l est pas. Il faut bien copier la chaîne caractère par caractère ou utiliser la fonction strcpy respectivement strncpy: strcpy(a, "Hello");

<stdlib>: Fonctions de bibliothèque conversion chaîne -> nombre atoi(<s>) retourne la valeur numérique représentée par <s> comme int atol(<s>) retourne la valeur numérique représentée par <s> comme long atof(<s>) retourne la valeur numérique représentée par <s> comme double (!) Règles générales pour la conversion: * Les espaces au début d'une chaîne sont ignorés * Il n'y a pas de contrôle du domaine de la cible * La conversion s'arrête au premier caractère non convertible * Pour une chaîne non convertible, les fonctions retournent zéro

Exercices: Ex 15: calcul de la surface sous une courbe En utilisant une méthode 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 entrés par l utilisateur avec un scanf. On considerera que la fonction f(x) est une fonction connue décrite par la déclaration suivante: float f(float x); Ex 16 : tri direct d un tableau écrire un programme qui permet de trier un tableau de nombres réels de façon directe et qui affiche le résultat.