La librairie ctype

En C++, nous avons plein de librairies qui peuvent nous faciliter la vie. Encore faut-il les connaitre.
Commençons par les standards avec CTYPE Pour l’utiliser, on appelle le header ctype.h de la même façon que nous utilisons la librairie de la META en incluant son entête (header) en début de programme.

#include <Gamebuino-Meta.h>
#include <ctype.h>

Cette librairie propose un ensemble de fonctions de traitement de caractères permettant de savoir si un caractère est d’une certaine nature (minuscule, majuscule, ponctuation, espace, chiffre, etc…), et des fonctions permettant de changer la casse de ces caractères (de le passer en minuscules ou en majuscules).

Prenons un exemple simple avec un programme qui va tester des variables pour nous dire si cette variable est de type alphanumérique ou non.

Nous allons initialiser ces 4 fonctions et nous afficherons tout simplement le résultat du test:

#include <Gamebuino-Meta.h>
#include <ctype.h>

int var1 = 'd';
int var2 = '2';
int var3 = '\t';
int var4 = ' ';

void setup() {
    // put your setup code here, to run once:
    gb.begin();
    SerialUSB.begin(9600);
}

void loop() {
   while (!gb.update());
   gb.display.clear();
   if( isalnum(var1) ) {
      gb.display.printf("var1 est alphanum.\n");
   } else {
      gb.display.printf("var1 n'est pas alphanum.\n");
   }

   if( isalnum(var2) ) {
      gb.display.printf("var2 est alphanum.\n");
   } else {
      gb.display.printf("var2 n'est pas alphanum.\n");
   }
   
   if( isalnum(var3) ) {
      gb.display.printf("var3 est alphanum.\n");
   } else {
      gb.display.printf("var3 n'est pas alphanum.\n");
   }

   if( isalnum(var4) ) {
      gb.display.printf("var4 est alphanum.\n");
   } else {
      gb.display.printf("var4 n'est pas alphanum.\n");
   }

}

Bon, c’est vraiment un programme simple pour illustrer une des fonctions de cette librairie.
Ces fonctions sont très facile à identifier : elles sont toutes préfixées de is et renvoient une valeur entière de type int , que l’on peut interpréter en temps que booléen (true pour 1 / false pour 0 ).

Voici la liste complète des fonctions de cette catégorie.

Nom Type Description
isalnum fonction Vérifie si un caractère est alphanumérique.
isalpha fonction Vérifie si un caractère est alphabétique.
isblank fonction Vérifie si un caractère est blanc ou non.
iscntrl fonction Vérifie si l’on a à faire à un caractère de contrôle.
isdigit fonction Vérifie si un caractère est un chiffre.
isgraph fonction Vérifie si un caractère possède une représentation graphique.
islower fonction Vérifie si un caractère est une lettre minuscule.
isprint fonction Vérifie si un caractère est affichable ou non.
ispunct fonction Vérifie s’il s’agit d’un caractère de ponctuation.
isspace fonction Vérifie s’il s’agit d’un caractère d’espacement.
isupper fonction Vérifie s’il s’agit d’une lettre majuscule.
isxdigit fonction Vérifie s’il s’agit d’un chiffre hexadécimal.

Les 2 fonctions de transformations en majuscules ou en minuscules sont:

Nom Type Description
tolower fonction Transforme une lettre majuscule en une minuscule.
toupper fonction Transforme une lettre minuscule en une majuscule.

Voici un petit exemple d’utilisation de ces fonctions:

#include <Gamebuino-Meta.h>
#include <ctype.h>

// lower are all lowercase letters from a to z
// upper are all capital letters from A to Z
// alpha are lower and upper letters
// digit are decimal digits from 0 to 9
// space are spaces and tabs

char str[] = "TUtoRIal 123.";
int var2 = '2';

void setup() {
  // put your setup code here, to run once:
  gb.begin();
  SerialUSB.begin(9600);
}

void loop() {
  while (!gb.update());
  gb.display.clear();
  for (int i = 0; str[i]; i++)  {

    if ( islower(str[i]) ) {
      gb.display.print("minuscule,");
      str[i] = toupper(str[i]);
    } else if ( isspace(str[i]) ) {
      gb.display.print("espace,");
    } else if ( isdigit(str[i]) ) {
      gb.display.print("chiffre,");
    } else if ( isupper(str[i]) ) {
      gb.display.print("majuscule,");
    } else {
      gb.display.print("autre,");
    }
  }
  gb.display.println("");
  gb.display.println("");
  gb.display.println("En majuscules:");
  gb.display.printf("%s\n", str);
}

Voilà, rien n’a dire de plus sur cette librairie. Dans nos programmes sur la META, ce n’est pas celle que l’on utilisera le plus mais ça peut être pratique de la connaitre pour certains cas et pour apprendre à programmer car sur PC, elle peut servir beaucoup plus notamment pour vérifier de la validité de saisie ou pour transformer un fichier reçu dans un format spécifique en sortie par exemple pour un traitement automatique, etc…

A bientôt pour découvrir les fonctions d’une nouvelle librairie.

3 Likes