Fonction isupper

Entête à inclure

#include <ctype.h>  // <cctype> en C++

Fonction isupper

int isupper( int character );

Cette fonction permet de tester si un caractère donné est une lettre majuscule 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 majuscule.

Paramètre

  • character : le caractère à tester. Il est sur-typé par int car la fonction peut aussi accepter la valeur -1 (EOF - End Of File) correspondant à la fin d'un flux.

Valeur de retour

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 majuscule. La valeur 0 indiquera qu'il ne s'agit pas d'une lettre majuscule.

Exemple de code

#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 ( isupper( buffer[i] ) ) {
            buffer[i] |= 32;  // equivalent à un appel à tolower
        }
    }

    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 OR sur la valeur numérique du caractère considéré en ajoutant le sixième bit : si l'on a une lettre majuscule, on passera donc bien à une lettre minuscule.

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 : De La Vega
Hello de la vega
$>

Sujets connexes

isalnum
isalpha
isblank
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isxdigit
tolower
toupper