C ++ strtol () - Bibliothèque standard C ++

La fonction strtol () en C ++ interprète le contenu d'une chaîne comme un nombre entier de la base spécifiée et renvoie sa valeur comme un long int.

La fonction strtol () en C ++ interprète le contenu d'une chaîne comme un nombre entier de la base spécifiée et renvoie sa valeur comme un long int. Cette fonction définit également un pointeur pour qu'il pointe sur le premier caractère après le dernier caractère valide de la chaîne s'il y en a, sinon le pointeur est défini sur null.

 Pour la base 10 et la chaîne "12abc": Partie numérique valide -> 12 Premier caractère après la partie numérique valide -> a

prototype strtol () (à partir de la norme C ++ 11)

 long int strtol (const char * str, char ** end, int base);

La fonction strtol () prend string, un pointeur vers un caractère et une valeur entière - base comme paramètre, interprète le contenu de string comme un nombre entier de la base donnée et renvoie une valeur int longue.

Cette fonction est définie dans le fichier d'en-tête.

Paramètres de strtol ()

  • str: Une chaîne ayant la représentation d'un nombre entier.
  • end:Référence à un objet déjà alloué de type char *. La valeur de fin est définie par la fonction sur le caractère suivant dans str après le dernier caractère valide. Ce paramètre peut également être un pointeur nul, auquel cas il n'est pas utilisé.
  • base:La base de la valeur intégrale. L'ensemble des valeurs valides pour la base est (0, 2, 3,…, 35, 36).

strtol () Valeur de retour

La fonction strtol () renvoie:

  • une valeur int longue (qui est convertie à partir de la chaîne).
  • 0 si aucune conversion valide n'a pu être effectuée.

Exemple 1: Comment strtol () fonctionne en C ++?

 #include #include using namespace std; int main() ( int base = 10; char str() = "27ab_1x"; char *end; long int num; num = strtol(str, &end, base); cout << "Number in String = " << str << endl; cout << "Number in Long Int = " << num << endl; cout << "End String = " << end << endl << endl; // the pointer to invalid characters can be null strcpy(str, "27"); cout << "Number in String = " << str << endl; num = strtol(str, &end, base); cout << "Number in Long Int = " << num << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; ) 

Lorsque vous exécutez le programme, la sortie sera:

 Number in String = 27ab_1x Number in Long Int = 27 End String = ab_1x Number in String = 27 Number in Long Int = 27 Pointeur nul

Une valeur entière valide pour la fonction strtol () se compose de:

  • Un signe + ou - facultatif.
  • Un préfixe 0 pour la base octale (s'applique uniquement lorsque base = 8 ou 0).
  • Un préfixe 0x ou 0X pour base hexadécimale (s'applique uniquement lorsque base = 16 ou 0).
  • Une séquence de chiffres et / ou d'alphabets (si la base est supérieure à 10).

Les valeurs valides pour la base de paramètres sont (0, 2, 3,…, 35, 36). Un ensemble de chiffres valides pour la base 2 est (0, 1), pour la base 3 est (0, 1, 2) et ainsi de suite. Pour les bases de 11 à 36, les chiffres valides incluent les alphabets. L'ensemble des chiffres valides pour la base 11 est (0, 1,…, 9, A, a), pour la base 12 est (0, 1,…, 9, A, a, B, b) et ainsi de suite.

Remarque: Il est important de se rappeler qu'un caractère valide pour une base peut se retrouver dans la chaîne non valide pour une autre base comme dans l'exemple ci-dessous.

Exemple 2: fonction strtol () avec différentes bases

 #include #include #include using namespace std; int main() ( char *end; cout << "128bz" << " to Long Int with base-5 = " << strtol("128bxz", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-12 = " << strtol("128bxz", &end, 12) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-36 = " << strtol("128bxz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 128bz à Long Int avec base-5 = 7 End String = 8bxz 128bz à Long Int avec base-12 = 2123 End String = xz 128bz à Long Int avec base-36 = 64214135 End String = 

La fonction strtol () ignore tous les caractères blancs de tête jusqu'à ce que le caractère non-blanc principal soit trouvé.

En général, un argument entier valide pour la fonction strtol () a la forme suivante:

 (espace) (- | +) (0 | 0x) (caractères alphanumériques)

Ensuite, à partir de ce caractère, il prend autant de caractères que possible pour former une représentation entière valide et les convertit en une valeur int longue. Ce qui reste de la chaîne après le dernier caractère valide est ignoré et n'a aucun effet sur le résultat.

Exemple 3: fonction strtol () pour les espaces de début et la conversion invalide

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Int with base-11 = " << strtol(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Int with base-2 = " << strtol(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Int with base-10 = " << strtol("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 25axbz à Long Int avec base-11 = 307 End String = xbz 110bcd à Long Int avec base-2 = 6 End String = bcd ax110.97 à Long Int avec base-10 = 0 End String = ax110.97 

Si la base est 0, la base numérique est déterminée automatiquement en regardant le format de la chaîne. Si le préfixe est 0, la base est octale (8). Si le préfixe est 0x ou 0X, la base est hexadécimale (16), sinon la base est décimale (10).

Exemple 4: fonction strtol () avec base 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "0128ai" << " to Long Int with base-0 = " << strtol("0128ai", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x15axzz" << " to Long Int with base-0 = " << strtol("0x15axzz", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "23dfl" << " to Long Int with base-0 = " << strtol("23dfl", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

0128ai à Long Int avec base-0 = 10 End String = 8ai 0x15axzz à Long Int avec base-0 = 346 End String = xzz 23dfl à Long Int avec base-0 = 23 End String = dfl 

Articles intéressants...