#include <ctype.h> // <cctype> en C++
int islower( int character );
Cette fonction permet de tester si un caractère donné est une lettre minuscule ou non. Rappel : les fonctions de cette librairie ne traitent que les caractères purs ASCII. Les lettres accentuées ne seront donc pas considérées comme des caractères alpha-numériques. De plus les caractères ne preprésentant même pas une lettre ne seront donc pas considérés comme une minuscule.
int
car la fonction peut aussi accepter la valeur -1 (EOF - End Of File) correspondant à la fin d'un
flux.
La valeur de retour doit être interprétée en tant que valeur booléenne. Une valeur positive non nulle signifira cond qu'il s'agit bien d'une lettre minuscule. La valeur 0
indiquera qu'il ne s'agit pas d'une lettre minuscule.
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char buffer[80]; printf( "Enter your last name : " ); scanf( "%[^\n]", buffer ); size_t length = strlen( buffer ); for( size_t i=0; i<length; i++ ) { if ( islower( buffer[i] ) ) { buffer[i] &= 223; // equivalent à un appel à toupper } } printf( "Hello %s\n", buffer ); return EXIT_SUCCESS; }
Afin de mieux comprendre cet exemple, une petite précision peut être utile. Dans la table ASCII, les lettres majuscules et les lettres minuscules ont leurs codes numériques espacés de 32 unités.
Ainsi le caractère 'A'
a comme code numérique 65 alors que le caractère 'a'
a comme code numérique 97. En fait, la valeur 32 correspond à 25 : donc la présence
ou non d'un bit permet de passer d'une plage de caractères à l'autre. Ce choix est historique : à l'époque, exécuter des opérations numériques (ajout, sustraction) prenait plus de cycles CPU
que l'exécution d'opérations binaires (opérations AND, OR, ...). Dans notre exemple, on fait un masque binaire AND sur la valeur numérique du caractère considéré en supprimant le sixième bit
(255 - 32 = 223) : si l'on a une lettre minuscule, on passera donc bien à une lettre majuscule.
Attention : cet exemple utilise des éléments de syntaxe définis dans le standard C99. L'emploie de l'option -std=c99
sur
la ligne de compilation de votre exemple est donc requis.
Voici un petit exemple d'exécution de ce programme :
$> gcc -o Sample -Wall -std=c99 Sample.c $> ./Sample Enter your last name : Toto Hello TOTO $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :