ATOI |
Alpha à entier |
---|---|
Langage C | stdlib.h |
Syntaxe
int atoi(const char *str); |
Paramètres
Nom | Description |
---|---|
str | Ce paramètre permet d'indiquer la chaîne de caractères à convertir |
Description
Cette fonction convertie une chaîne de caractères en une valeur entière «int».
Algorithme
* Entrée : Une chaîne de caractères str représentant un nombre entier * Sortie : Un entier (int) MODULE ATOI(str) Initialiser index ← 0 Initialiser résultat ← 0 Initialiser signe ← 1 * Ignorer les espaces blancs initiaux BOUCLE TANT QUE str[index] est un espace blanc FAIRE Incrémenter index FIN BOUCLE TANT QUE * Vérifier le signe SI str[index] = '-' ALORS signe ← -1 Incrémenter index SINON SI str[index] = '+' ALORS Incrémenter index FIN SI * Lire les chiffres et les convertir en entier BOUCLE TANT QUE str[index] est un chiffre FAIRE résultat ← (résultat x 10) + (valeur numérique de str[index]) Incrémenter index FIN BOUCLE TANT QUE RETOURNE résultat x signe |
Remarques
- La valeur à convertir doit être situé dans l'intervalle de -32 768 et 32 767 si le type de données int est pour un compilateur 16 bits ou de -2 147 483 648 à 2 147 483 647 pour un compilateur 32 bits et pourrait être même encore plus grand sur certains plate-formes. Étant donné que l'intervalle varie énormément d'un compilateur à l'autre et de sa plate-forme, il est préférable, il préférable d'utiliser les constantes MIN_INT et MAX_INT pour en connaître l'intervalle.
- Si vous ne respectez pas l'intervalle du type de données, le résultat retourner par la fonction sera imprévisible, ainsi, certains compilateurs retourneront la partie base de la valeur, d'autre, uniquement les derniers chiffres et d'autres pourraient même faire planter le compilateur. Vous devrez donc effectuer un test manuellement avec une fonction strlen pour déterminer la longueur de la chaîne de caractères ou effectuer une boucle for pour vous assurez de la conformité du nombre. Dans le cas des compilateurs C modernes, beaucoup de programmeurs préféreront utiliser des regex (expressions régulières) pour s'assurer que la valeur est valide. Le projet GNU propose une bibliothèque regex et les fonctions regcomp, regexec, regerror et regfree pour se genre de situation.
- Si vous souhaitez ne pas être à la merci d'intervalle trop petit à cause du type de données int, vous devriez plutôt envisager l'utilisation des fonctions atol et atoll. Si vous souhaitez convertir des nombres réels (à virgule flottante), vous devriez plutôt envisager d'utiliser la fonction strtod.
- La conversion de la valeur contenue dans la chaîne de caractères s'arrête aussitôt que l'analyse ne trouve plus de chiffres.
- La fonction atoi ne gère que les nombres et ne comprend pas les expressions arithmétiques, ainsi, si vous souhaitez effectuer la calcul d'une expression arithmétiques à l'aide de cette fonction, vous devriez utiliser un algorithme de «Infix to Postfix».
Exemples
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
on obtiendra le résultat suivant :
atoi('12')=12atoi('-7')=-7
L'exemple suivant permet de montrer le comportement de cette fonction lorsqu'il ne contient pas uniquement des nombres mais des caractères par exemple :
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- printf("atoi('gladir')=%i\n",atoi("gladir"));
- printf("atoi('gladir.')=%i\n",atoi("gladir."));
- printf("atoi('gladir.com')=%i\n",atoi("gladir.com"));
- printf("atoi('16gladir.com')=%i\n",atoi("16gladir.com"));
- printf("atoi('gladir.com16')=%i\n",atoi("gladir.com16"));
- printf("atoi('gladir16.17com')=%i\n",atoi("gladir16.17com"));
- return 0;
- }
on obtiendra le résultat suivant :
atoi('gladir')=0atoi('gladir.')=0
atoi('gladir.com')=0
atoi('16gladir.com')=16
atoi('gladir.com16')=0
atoi('gladir16.17com')=0
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - atoi
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 730.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 34.
Dernière mise à jour : Mardi, le 28 juillet 2015