CHAINES DE CARACTÈRES

Documents pareils

Les chaînes de caractères

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Utilisation d objets : String et ArrayList

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

Chap III : Les tableaux

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Les structures. Chapitre 3

Programme Compte bancaire (code)

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

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Langage Java. Classe de première SI

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

I. Introduction aux fonctions : les fonctions standards

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Algorithmique et Programmation, IMA

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP 1. Prise en main du langage Python

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Chapitre 2 Devine mon nombre!

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Conventions d écriture et outils de mise au point

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

2 Comment fonctionne un ordinateur, dans les grandes lignes

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

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

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

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

ACTIVITÉ DE PROGRAMMATION

Programmation système de commandes en C

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

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

Cours 14 Les fichiers

TP : Gestion d une image au format PGM

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

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

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

SUPPORT DE COURS. Langage C

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

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)

Notions fondamentales du langage C# Version 1.0

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

TP3 : Manipulation et implantation de systèmes de fichiers 1

Présentation du langage et premières fonctions

OCL - Object Constraint Language

Algorithmique et programmation : les bases (VBA) Corrigé

Java Licence Professionnelle CISII,

Programmation C++ (débutant)/instructions for, while et do...while

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Cours Programmation Système

Découverte de Python

STAGE IREM 0- Premiers pas en Python

Traitement de texte : Quelques rappels de quelques notions de base

Recherche dans un tableau

1.6- Génération de nombres aléatoires

Chapitre 1 : La gestion dynamique de la mémoire

.NET - Classe de Log

Utiliser les supports d'exemplaires

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Algorithmique & programmation

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Programmation C. Apprendre à développer des programmes simples dans le langage C

Le langage C. Séance n 4

Introduction à JDBC. Accès aux bases de données en Java

Navigation dans Windows

INF 321 : mémento de la syntaxe de Java

Corrigé des exercices sur les références

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Programmation système I Les entrées/sorties

MODE OPERATOIRE OPENOFFICE BASE

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Le chiffre est le signe, le nombre est la valeur.

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

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TD/TP PAC - Programmation n 3

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER

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

Le prototype de la fonction main()

KL5121. Pour activer des sorties en fonction de la position d'un codeur

TP1 : Initiation à Java et Eclipse

as Architecture des Systèmes d Information

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

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

Une introduction à Java

Les fichiers. Chapitre 4

Tp 1 correction. Structures de données (IF2)

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

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

Solutions du chapitre 4

TD/TP PAC - Programmation n 3

Programmation avec des objets : Cours 7. Menu du jour

Architecture des ordinateurs

Transcription:

Semestre Universitaire de Réorientation Université Claude Bernard Lyon I Année Universitaire 2017-2018 CHAINES DE CARACTÈRES Séance du 15 mars 2018 Elodie DESSEREE Responsable Licence Informatique Lyon 1 elodie.desseree@univ-lyon1.fr

PLAN DE LA SÉANCE Apprendre à manipuler les chaînes de caractères Voir un exemple de conception utilisant largement les fonctionnalités des chaînes de caractères Le jeu du pendu Autres exercices d application 2

PARLONS D'ABORD DES CARACTÈRES Caractère : type simple peut être renvoyé par une fonction C (instruction return) char représente une lettre ou un caractère spécial (mis entre quotes, touche 4) 'a' ou '\n' (saut de ligne) Le char est vraiment codé comme un numéro entre 0 et 255. C'est le codage ASCII 'A' == 65, 'Z' == 90 'a' == 97, 'z' == 122 + 32 3

Chaque caractère a un «code» unique Entier entre 0 et 255 Exemple E 69 x 120 e 101 m 109 p 112 l 108 e 101 4 LE CODE ASCII 32 64 @ 96 ` 33! 65 A 97 a 34 " 66 B 98 b 35 # 67 C 99 c 36 $ 68 D 100 d 37 % 69 E 101 e 38 & 70 F 102 f 39 ' 71 G 103 g 40 ( 72 H 104 h 41 ) 73 I 105 i 42 * 74 J 106 j 43 + 75 K 107 k 44, 76 L 108 l 45-77 M 109 m 46. 78 N 110 n 47 / 79 O 111 o 48 0 80 P 112 p 49 1 81 Q 113 q 50 2 82 R 114 r 51 3 83 S 115 s 52 4 84 T 116 t 53 5 85 U 117 u 54 6 86 V 118 v 55 7 87 W 119 w 56 8 88 X 120 x 57 9 89 Y 121 y 58 : 90 Z 122 z 59 ; 91 [ 123 { 60 < 92 \ 124 61 = 93 ] 125 } 62 > 94 ^ 126 ~ 63? 95 _ 127

PARLONS D'ABORD DE CARACTÈRES On peut comparer des caractères bool estmajuscule(char c) { if ((c >= 'A') && (c <= 'Z')) return true; else return false; } On peut les soustraire 5 int char2decimal(char c) { if (c >= '0' && c <= '9') return c '0'; else return -1; }

LA CHAÎNE DE CARACTÈRES Pour représenter des phrases ou des ensembles de caractères Algo : chaîne [10] de caractères C/C++ : char mot[10] On a besoin de connaître la taille On peut mettre des chaînes plus petites que la taille maximale -1 dans le tableau On marque la fin de la chaîne avec le caractère \0 Pour les caractères numériques : pas la valeur mais le caractère!! Pas la valeur 0 mais vraiment caractère '0!!! 6

CARACTÈRE / CHAÎNE DE CARACTÈRES Notez que ''a'' est la chaîne de caractères et 'a' est le caractère. Exemple 1 : char mot_a[2]; déclaration mot_a[0] = 'a'; remplissage de la 1 ière case mot_a[1] = '\0'; caractère de fin de chaîne Exemple 2 : char let_a[1]; let_a[0] = 'a'... est un tableau avec une seule lettre... pas une chaîne de caractères 'a' = char 7 ''a'' = mot_a = char[2] = let_a = char[1] = 'a' 0 'a'

CHAÎNE DE CARACTÈRES : SYNTHÈSE Déclaration char mot[100]; Lire du clavier cin >> mot; Accès à la lettre de la case 4 : mot[4] Toutes les cases ne sont pas nécessairement remplies Caractère de fin de chaîne : \0 8

CHAÎNE DE CARACTÈRES DANS LES FONCTIONS / PROCÉDURES En C, on ne peut pas renvoyer comme résultat une chaîne de caractères c'est un tableau. NON : char [10] saisir_phrase(void) { char mot[10];... return mot; } Elle sont toujours données/résultats quand elle sont en paramètre, donc on met pas & Déclaration : int taillemot(char mot[10]); C'est le cas pour tous les tableaux! NON : int taillemot(char & mot[10]); 9

OPÉRATIONS DE BASE SUR LES CHAÎNES DE CARACTÈRES Il existe un certain nombre d opérations prédéfinies sur les chaînes de caractères Dans la bibliothèque <string.h> (en anglais chaîne de caractères = string) Du même ordre que celles existant sur les entiers, les caractères Quelques exemples 10

COMPARAISON DE CHAÎNES Et si on veut écrire une fonction qui trouve l'ordre (dictionnaire) entre deux mot? «aurevoir» avant «bonjour» «bon» avant «bonjour»... int strcmp(char a[100], char b[100]) Renvoie 0 si a == b Renvoie 1 si a > b Renvoie -1 si a < b 11

LONGUEUR DE LA CHAÎNE Fonction prédéfinie strlen (pour string length) Compter nombre de lettres strlen(mot) ou for(i = 0; mot[i]!= \0 ; i++) Le grand problème est la condition de terminaison Que passe-t-il s'il n'y a pas de \0 dans mot dans l'exemple ci-dessus? C'est la cause de beaucoup de problèmes 12

CONCATÉNATION DE CHAÎNES Fonction prédéfinie strcat (string concat) Permet d ajouter un chaîne à la suite d une autre : "bon" + "jour" = "bonjour" void strcat(mot1[100], mot2[100]) Met le mot2 à la suite de mot1 Rajoute automatiquement le \0 en fin de chaîne reconstituée 13

On n a pas le droit d écrire char mot[100]; mot="hello"; /* NON */ COPIE DE CHAÎNE Pour copier une chaîne dans une autre il faut impérativement passer par la fonction strcpy (string copy) Exemple : strcpy(mot,"hello"); 14

EXEMPLE D UTILISATION JEU DU PENDU On souhaite écrire un mini-jeu qui demande à l'utilisateur de trouver toutes les lettres d'un mot choisi par une autre personne (jeu du pendu) Au début de la partie, la solution comporte autant d'emplacements vides que de lettres dans le mot à trouver. Lorsque le joueur propose une lettre, il suffit de vérifier son existence dans le mot à trouver et de la faire apparaître dans la solution. Le jeu s'arrête lorsque le joueur a trouvé toutes les lettres ou après 4 échecs. 15 Exemple : trouver toto / solution - - - - saisie lettre o / solution -o-o saisie lettre t / solution toto mot trouvé donc gagné

ANALYSER LE PROBLÈME Vous avez un problème, comment le résoudre? Diviser en sous-problèmes plus simples Penser : De quelle(s) information(s) avez vous besoin? Variables De quelle manière sera manipulée cette information? Opérations, fonctions, procédures Codage : en programmation, on représente beaucoup de choses avec des nombres... Comment on va représenter l'information ou l'état...? 16

SOLUTION (1/4) Écrivez la procédure saisie() qui demande à une autre personne de choisir un mot à trouver. Déclarer une chaîne de caractères pour stocker le mot proposé Saisie du mot (cin >> mot) Restitution de sa valeur (paramètre en donnée / résultat par défaut) 17

SOLUTION (2/4) Écrivez la fonction creer_solution() qui remplit la chaîne de caractères représentant la solution par des tirets. Chaque tiret représente une lettre du mot à trouver. La fonction renvoie le nombre de lettres à trouver. Idée de codage! 18

SOLUTION (3/4) Écrivez la fonction solution() qui recherche la lettre passée en paramètre. Pour chaque occurrence, remplacez le tiret correspondant de la solution. Cette fonction renvoie le nombre de remplacements effectués. Idée : qu'est ce que on a besoin de manipuler... Chaîne initiale Chaîne résultat Lettre à rechercher Comparaison de caractères 19

SOLUTION (4/4) Écrivez la fonction principale qui enchaîne les différentes étapes. Lorsque la fonction solution renvoie 0, l'utilisateur perd un essai, puisqu'il n'a pas trouvé de lettre. Le nombre de lettres restant à trouver se déduit facilement dans le cas où une lettre a été découverte. La solution et le nombre d'essais restants sont affichés à chaque tentative. Le jeu se termine lorsqu'il ne reste plus d'essais ou que l'utilisateur a trouvé le mot. 20

EXERCICES CLASSIQUES Écrire une fonction qui compte le nombre de caractères dans une chaîne (sans utiliser la fonction prédéfinie strlen) Ex : longueur("bonjour") renvoie 7 Écrire une procédure qui affiche une chaîne de caractère en inscrivant un caractère par ligne Ex : affiche("hello") h e l l o Ecrire une procédure qui construit dans une nouvelle chaine le miroir d une chaîne de caractères. Ex : le miroir de "bonjour" est "ruojnob"

EXERCICES CLASSIQUES Écrire une fonction qui retourne le nombre d occurrences d une lettre dans une chaîne de caractères Ex : nb_occurrence("bonjour", o ) 2 nb_occurrence("bonjour", z ) 0 Écrire une fonction qui teste si une chaîne passée en paramètre est un palindrome ou non. Ex : palindrome("eluparcettecrapule") Vrai palindrome("bonjour") Faux Écrire une procédure qui prend une chaîne donnée en minuscules et construit la chaîne équivalente en majuscules, sans changer les caractères non-alphabétiques. Ex : min2maj("bonjour") "BONJOUR"

CONCLUSION Les chaînes de caractères Tableau contenant des caractères Caractère de fin de ligne Opérations prédéfinies Dans la bibliothèque string.h principalement 23