Chaines de caractères en C. Mardi 9/5

Documents pareils
Les chaînes de caractères

Chap III : Les tableaux

Programmation système de commandes en C

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

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)

Les structures. Chapitre 3

Algorithmique et Programmation, IMA

Le langage C. Séance n 4

Les fichiers. Chapitre 4

Chapitre 1 : La gestion dynamique de la mémoire

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

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

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

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

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Le prototype de la fonction main()

INITIATION A LA PROGRAMMATION

Programmation en langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Initiation à la programmation en Python

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

I. Introduction aux fonctions : les fonctions standards

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Introduction au langage C

Utilisation d objets : String et ArrayList

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

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

TP 1. Prise en main du langage Python

Programmation impérative

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation système I Les entrées/sorties

Représentation d un entier en base b

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

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

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

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

Logiciel de Base. I. Représentation des nombres

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

Licence Sciences et Technologies Examen janvier 2010

Cours Programmation Système

Rappels Entrées -Sorties

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

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

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

SUPPORT DE COURS. Langage C

Conventions d écriture et outils de mise au point


ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

STAGE IREM 0- Premiers pas en Python

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

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Présentation du langage et premières fonctions

Programmation Classique en langage C

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Claude Delannoy. 3 e édition C++

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

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

TP, première séquence d exercices.

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

Cours de Systèmes d Exploitation

Introduction à la Programmation Parallèle: MPI

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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

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

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

Programmation structurée et Langage C. L informatique à Phelma. Première séance. Lancer un terminal

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Les structures de données. Rajae El Ouazzani

Cours 6 : Tubes anonymes et nommés

Solutions du chapitre 4

Introduction au Langage de Programmation C

INF 321 : mémento de la syntaxe de Java

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

Langage Éric Guérin 5 octobre 2010

Programmation en C - Sommaire

V- Manipulations de nombres en binaire

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

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

3IS - Système d'exploitation linux - Programmation système

Initiation à LabView : Les exemples d applications :

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

Langage Java. Classe de première SI

Algorithme. Table des matières

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

COURS et TP DE LANGAGE C++

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

Structure d un programme

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Algorithmique et programmation : les bases (VBA) Corrigé

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

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Chapitre 10. Les interfaces Comparable et Comparator 1

LECON 2 : PROPRIETES DE L'AFFICHAGE Version aout 2011

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

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

Transcription:

Chaines de caractères en C Mardi 9/5 1

Les constantes de type caractère En C une constante de type caractère est un nombre entier écrit sous la forme d un caractère entre apostrophes, comme a. La valeur d une constante de type caractère est égale à la valeur du caractère d après le code ASCII. Exemples: A vaut 65 a vaut 97 'B vaut 66 0 vaut 48 (+32 sur le code(a)) 2

Les variables de type caractère Pour declarer une variable de type char, on procède de la façon suivante: char c1, /* c1 est une variable de type caractère */ c2 = a ; /* c2 est une variable de type caractère initialisée à a */ 3

Les entrées et sorties #include <stdio.h> main(){ char c ; printf("taper un caractere: "); c = getchar(); putchar(c); // comme printf } 4

Exemple 1: lecture avec getchar Le prog suivant saisit une séquence de char à partir du clavier tant le caractère saisit n'est pas '.' #include <stdio.h> /* affiche le caractère tapé à l'écran */ main(){ int c=''; while (c!= '.') { c = getchar(); putchar(c); } } #include <stdio.h> main(){ int c; while((c =getchar())!= '.' ){ putchar(c); } 5

Les chaînes de caractères En C il n y a pas de variable de type chaîne de caractères. Une chaîne de caractère est un tableau de caractères se terminant par le caractère '\0' (le caractère nul ayant la valeur 0) Ainsi la chaîne Bonjour groupe! serait représentée de la façon suivante: char ch[]="bonjour groupe!"; 0 1 2 3 4 5 6 7 8 9 B o n j o u r g r 10 11 12 13 14 15 o u p e! \0 Une constante chaîne "a" se termine aussi par \0 : 0 1 a \0 6

Déclaration de chaînes de caractères en C char <NomVariable> [<Longueur>]; Exemple : char NOM [9], TXT[] = "BONJOUR"; 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. 0 1 2 3 4 5 6 7 8 9 B O N J O U R \0 7

Saisie d'une chaine à partir du scanf avec le format %s: char chaine[10]; clavier printf("entrer une chaine de caractères: "); scanf("%s", &chaine); Délimiteur pour la lecture avec scanf: La fin de ligne ou le caractère espace On ne peut pas saisir des chaines contenant des blancs Le délimiteur n'est pas consommé par le scanf Il reste dans le tampon de lecture et sera consommé automatiquement par le prochain scanf 8

Saisie d'une chaine à partir du clavier 9

Affichage d'une chaine 10

char ch[]="bonjour groupe!"; puts(ch); puts("taper une chaine(max 16 car)"); gets(ch); puts("vs avez tape"); puts(ch);.. 11

#include <stdio.h> #define N 80 main(){ char str[n]; int i; printf("entrez une chaîne (max 80 car) :"); gets(str); puts(str); printf("\n"); // ou caractere par caractere for (i = 0; str[i]!='\0'; i++) printf("%c", str[i]); printf("\n"); } 12

Précédence lexicographique des chaînes de caractères a) La chaîne vide "" précède lexicographiquement toutes les autres chaînes. 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: 1) 'a1' < 'b1' 2) 'a1' = 'b1' et "a2a3... ap" précède lexicographiquement "b2b3... bm" Exemples "ABC" précède "BCD" "ABC" précède "B" "Abc" précède "abc" "ab" précède "abcd" car 'A'<'B' car 'A'<'B' car 'A'<'a' car "" précède "cd" " Ab" précède "ab" 'A' precede 'a' (ASCII(A)= 65 et ASCII(a)= 97) 13

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"); else{ if (C>='A' && C<='Z') printf("majuscule\n"); else { if (C>='a' && C<='z') printf("minuscule\n"); } } convertir des lettres majuscules en minuscules: if (C>='A' && C<='Z') C = C+ 32; ou vice-versa: if (C>='a' && C<='z') C = C- 32; 14

ctype.h Le fichier d en-tête ctype.h contient la déclaration de fonctions destinées à tester les caractères: isdigit(char c) retourne 1 si c est un chiffre, 0 sinon islower(char c) retourne 1 si c est une lettre minuscule, 0 sinon isupper(char c) retourne 1 si c est une lettre majuscule, 0 sinon isalpha(char c) retourne 1 si c est une lettre, o sinon isspace(char c) retourne 1 si c est un character d'espacement, 0 sinon 15

Fonctions de manipulation de chaines La librairie standard de C fournit plusieurs fonctions de traitement de chaînes de caractères ; elles nécessitent le fichier d'entête #include <string.h> Les prototypes sont: strcpy (char dest[], char src[]) ; strcat (char dest[], char src[]); strcmp (char ch1[], char ch2[]); strlen(char ch[]); 16

strcpy strcpy ( destination, source) ; Elle copie le contenu de source dans destination. Le contenu de source n'est pas changé. La fonction strcpy () ne fait pas de vérification des limites en nombre de caractères de la chaîne copiée. Le tableau de car qui la reçoit doit être suffisamment grand pour la contenir, sans oublier le caractère de fin '\0'. char str[80]; strcpy (str, "bonjour"); printf ("%s", str); 17

Exemple : Copier une chaîne sans utiliser la fct strcpy #include <stdio.h> #define N 50 /* copier: copie le tableau de dans le tableau vers ; on supose que le tableau vers est assez long */ char de[n], vers[n] ; int i = 0; while ( (vers[i] = de[i])!= \0 ) i = i + 1; } vers[i]= '\0';. 18

strcat strcat (destination, source) ; Elle ajoute le contenu d'une chaîne à la suite d'une autre. Ceci est appelé concaténation. strcat() ajoute le contenu de source au contenu de destination. char str[25]; strcpy(str, "bonjour "); strcat(str, "tout le monde!"); puts(str); b o n j o u r \0 b o n j o u r t o u t l e m o n d e! \0 Astuce Attention à la longueur de destination! 19

strcmp strcmp (s1,s2) ; Elle compare deux chaînes; elle renvoie: 0 : si les chaînes sont identiques, -1: si s1 < s2 s1 précède s2 +1: si s1 > s2 s1 succède s2 printf ("%d", strcmp ("un", "un")); /* affiche 0 */ printf ("%d", strcmp ("Un", "un")); /* affiche -1 */ printf ("%d", strcmp ("un", "Un")); /* affiche 1 */ 20

strlen strlen (str) ; Elle renvoie la longueur en nombre de caractères de la chaîne str. La fonction strlen() ne compte pas le caractère de terminaison '\0'. printf ("%d", strlen("essai")); /* affiche 5 */ 21

Exercice Ecrire un programme qui lit une chaine de caractères (max 20 caractères y compris '\0') on suppose que la chaine ne contient pas de chiffres ; la mémorise dans une variable CH1 puis convertit dans une nouvelle chaine CH2 les caractères minuscules de CH1 en majuscules et vice versa puis affiche les chaines CH1 et CH2 à l'écran. Exemple: CH1: TeSte CH2: teste 22

#include <stdio.h> #include<string.h> #define N 20 // on ajoute 1 pour \0 main(){ char CH1[N], CH2[N]; /* chaîne donnée et convertie*/ int i; /* Saisie de CH1 */ printf("entrez une chaine CH1 (max.19 caracteres) :\n"); gets(ch1); puts(ch1); for (i=0; i<strlen(ch1); i++) {//ou CH1[i]!='\0'ou CH1[i]!= '\n' if(ch1[i]>='a' && CH1[i]<='Z') // CH1[i] est majuscule CH2[i]=CH1[i]+32; // Maj en Min if(ch1[i]>='a' && CH1[i]<='z') // CH1[i] est majuscule CH2[i]=CH1[i]-32; // Min en Maj }// for CH2[i]='\0'; // fin de CH2 printf("\nch2:"); puts(ch2); } 23

Exercice Un mot est dit palindrome si on inverse l'ordre de ses lettres on obtient le même mot. Exemple:"radar", "ELLE". Ecrire un programme qui lit un mot (sans espaces blancs) et vérifie s'il est est palindrome ou non. Test d'exécution: Donner un mot: radar : est un palindrome Teste: n'est pas un palindrome 24

#include <stdio.h> #include <string.h> #define N 256 void main(){ char s[n]; int l = 0, r, palindrome=1; // on suppose que la chaine est palindrome puts("une chaine: "); scanf("%s", s); r = strlen(s)-1; while (l<r && palindrome){ printf("l=%d r=%d %c %c\n", l, r, s[l], s[r]); if (s[l]!= s[r]){ palindrome=0; } l++; r--; } if (palindrome==0 ) printf("%s n'est pas palindrome\n", s); else printf("%s est palindrome\n", s); } 25