Info Oujda
L'avenir c'est l'informatique
 
AccueilAccueil  PortailPortail  FAQFAQ  RechercherRechercher  S’enregistrerS’enregistrer  ConnexionConnexion  
Rejoinde le chat
Cliquez-ici
Derniers sujets
» les commandes de demarrer executer windows
Mer 25 Juin - 18:53 par chekhalid

» programation java
Mer 25 Juin - 18:33 par chekhalid

» TD/TP N°1:arborescence du systéme de fichiers d'UNIX:
Ven 9 Mai - 21:44 par myster

» le probleme du caractere de validation (entree) pour scanf
Sam 12 Avr - 13:48 par elhou

» Théorie de langages et compilation TP N°1
Dim 30 Mar - 19:30 par myster

» TP et TD N°1
Sam 29 Mar - 14:01 par Anas.Y

» Les TP de S1 S2 et S3
Mar 25 Mar - 12:59 par sweetty

» Mini Projet
Sam 22 Mar - 21:49 par Anas.Y

» P.F.E 2007/2008
Ven 21 Mar - 20:06 par myster

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Nombre de visites
Rechercher
 


 Résultats par :
 
Rechercher Recherche avancée
SMI-OUJDA


Bienvenue
Les chaines des caractères
Dim 16 Mar - 20:45 par tifouri


  • Titre :
le C depuit le 0
  • Partie :
1er partie de : les chaines des caracteres
  • Edition :
1er -2008
  • Auteure :
ETTIFOURI ELHASSANE
  • Licence :
Gratuit



Les chaınes de caractères :

Les chaınes de caractères sont représentes en C sous la forme d’un pointeur sur une zone contenant des caractères.
La fin de la chaıne est marquée par le caractère spécial ’\0’. Il est possible d’utiliser la déclaration sous forme de tableau : char ch[256]; définit une chaıne dont la longueur maximale est ici de 256 caractères, en comptant le caractère de terminaison. En fait, par convention, toute chaıne de caractère se termine par le caractère nul (pas le chiffre ’0’,
On peut écrire des chaînes constantes délimites par des guillemets. L’expression "chaine\n" est donc une
chaine comportant le mot chaine suivi d’un retour chariot, et comme toujours terminée par un caractère ’\0’.
La fonction strlen(s) (déclare dans < string.h > dans la bibliothèque standard) retourne la longueur de la
chaıne s jusqu’au premier code ’\0’. La fonction strcmp(s1,s2) permet de comparer deux chaınes. El retourne -1 si lexicographiquement s2 >s1, 0 si les deux chaînes sont identiques, et +1 si s1>s2.

Accès aux éléments d'une chaîne :
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[10];
Nous avons défini un tableau A avec 9 éléments, auxquels on peut accéder par:
A[0], A[1], ... , A[9]
Exemple :

Précédence alphabétique et lexicographique
1) 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, . . .
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.
Relation de précédence
De la précédence alphabétique des caractères, on peut déduire une relation de précédence 'est inférieur à' sur l'ensemble des caractères. Ainsi, on peut dire que
'0' est inférieur à 'Z'
et noter
'0' < 'Z'
car dans l'alphabet de la machine, le code du caractère '0' (ASCII: 4Cool est inférieur au code du caractère 'Z' (ASCII: 90).
Précédence lexicographique des chaînes de caractères
En nous basant sur cette relation de précédence alphabétique des caractères, nous pouvons définir une précédence lexicographique pour les chaînes de caractères. Cette relation de précédence suit l'<> et est définie de façon récurrente:
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
Code:
"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'
   (le code ASCII de ' ' est 32, et le code ASCII de 'a' est 97)

Remarque
Malheureusement, il existe différents codes de caractères (p.ex. ASCII, EBCDIC, ISO) et l'ordre lexicographique est dépendant de la machine. Même la fonction strcmp qui indique la précédence lexicographique de deux chaînes de caractères dépend du code de caractères utilisé.
Conversions et tests
En tenant compte de l'ordre alphabétique des caractères, on peut contrôler le type du caractère (chiffre, majuscule, minuscule).
Exemples
Code:
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';


La bibliothèque nous offre des fonctions qui effectuent l'entrée et la sortie des données. A côté des fonctions printf et scanf que nous connaissons déjà, nous y trouvons les deux fonctions puts et gets, spécialement conçues pour l'écriture et la lecture de chaînes de caractères.
- Affichage de chaînes de caractères
Printf avec le spécificateur de format %s permet d'intégrer une chaîne de caractères dans une phrase.
En plus, le spécificateur %s permet l'indication de la largeur minimale du champ d'affichage. Dans ce champ, les données sont justifiées à droite. Si on indique une largeur minimale négative, la chaîne sera justifiée à gauche. Un nombre suivant un point indique la largeur maximale pour l'affichage.
Exemples
Code:
char NOM[] = "SMI, OUJDA";       
printf(":%s:", NOM);    ->    :SMI, OUJDA:
printf(":%5s:", NOM);    ->    :SMI, OUJDA:
printf(":%15s:", NOM);    ->    :      SMI, OUJDA:
printf(":%-15s:", NOM);    ->    :SMI, OUJDA      :
printf(":%.3s:", NOM);    ->    :SMI:

puts est idéale pour écrire une chaîne constante ou le contenu d'une variable dans une ligne isolée.
Syntaxe: puts( )
Effet: puts écrit la chaîne de caractères désignée par sur stdio et provoque un retour à la ligne. En pratique,
puts(TXT); est équivalent à printf("%s\n",TXT);
Exemples
Code:
char TEXTE[] = "Voici une première ligne.";
puts(TEXTE);
puts("Voici une deuxième ligne.");

- Lecture de chaînes de caractères
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.
Effet: scanf avec le spécificateur %s lit un mot du fichier d'entrée standard stdio et le mémorise à l'adresse qui est associée à %s.
Exemple
Code:
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 - La fonction scanf a besoin des adresses de ses arguments:
* Les noms des variables numériques (int, char, long, float, ...) doivent être marqués par le symbole '&' .
* 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 '&' !
- La fonction scanf avec plusieurs arguments présuppose que l'utilisateur connaisse exactement le nombre et l'ordre des données à introduire! Ainsi, l'utilisation de scanf pour la lecture de chaînes de caractères est seulement conseillée si on est forcé de lire un nombre fixé de mots en une fois.
gets est idéal pour lire une ou plusieurs lignes de texte (p.ex. des phrases) terminées par un retour à la ligne.
Syntaxe: gets( )
Effet: gets lit une ligne de caractères de stdio et la copie à l'adresse indiquée par . Le retour à la ligne final est remplacé par le symbole de fin de chaîne '\0'.
Exemple
Code:
int oujda = 1000;
char smi[oujda];
gets(smi);


Arrow Auteure : ETTIFOURI Elhassane 2008-2009 ENSAO Arrow

Commentaires: 5
Télécharger SMI-Oujda toolbar
Cliquez-ici
Sondage
Quel est à votre avis le meilleur système d'exploitation?
Windows
31%
 31% [ 5 ]
Linux
50%
 50% [ 8 ]
MacOS
18%
 18% [ 3 ]
Autres
0%
 0% [ 0 ]
Total des votes : 16
Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

Utilisateurs enregistrés : Aucun


[ Voir toute la liste ]

Le record du nombre d’utilisateurs en ligne est de 9 le Ven 29 Fév - 20:54
Statistiques
Nous avons 110 membres enregistrés
L’utilisateur enregistré le plus récent est eldiable2005

Nos membres ont posté un total de 920 messages dans 278 sujets
connectés en temps réel