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

La fonction strtoll () en C ++ interprète le contenu d'une chaîne comme un nombre entier de la base spécifiée et renvoie sa valeur sous la forme d'un long 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 "201xz $" Partie numérique valide -> 201 Premier caractère après la partie numérique valide -> x

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

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

La fonction strtoll () 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 longue valeur int longue.

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

Paramètres de strtoll ()

  • 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).

strtoll () Valeur de retour

La fonction strtoll () renvoie:

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

Exemple 1: Comment fonctionne la fonction strtoll ()?

 #include #include #include using namespace std; int main() ( int base = 10; char numberString() = "13.5ab_1x"; char *end; long long int number; number = strtoll(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "13"); cout << "String value = " << numberString << endl; number = strtoll(numberString, &end, base); cout << "Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )

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

 Valeur de chaîne = 13.5ab_1x Long long int value = 13 End String = .5ab_1x String value = 13 Long long int value = 13 Pointeur nul

Une valeur entière valide pour la fonction strtoll () 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.

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

 #include #include using namespace std; int main() ( char *end; cout << "23ajz" << " to Long Long Int with base-7 = " << strtoll("23ajz", &end, 7) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-20 = " << strtoll("23ajz", &end, 20) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-36 = " << strtoll("23ajz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

 23ajz à Long Long Int avec base-7 = 17 End String = ajz 23ajz à Long Long Int avec base-20 = 17419 End String = z 23ajz à Long Long Int avec base-36 = 3512879 End String =

La fonction strtoll () ignore tous les premiers caractères d'espacement jusqu'à ce que le caractère non-blanc principal soit trouvé.

En général, un argument entier valide pour la fonction strtoll () 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 qui forment une représentation entière valide et les convertit en une valeur longue longue int. 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 strtoll () pour les espaces de début et la conversion invalide

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

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

 25axbz à Long Long Int avec base-11 = 307 End String = xbz 110bcd à Long Long Int avec base-2 = 6 End String = bcd ax110.97 à Long 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 strtoll () avec base 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "025x" << " to Long Long Int with base-0 = " << strtoll("025x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0xf1x" << " to Long Long Int with base-0 = " << strtoll("0xf1x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "15ab" << " to Long Long Int with base-0 = " << strtoll("15ab", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

 025x à Long Long Int avec base-0 = 21 End String = x 0xf1x à Long Long Int avec base-0 = 241 End String = x 15ab à Long Long Long Int avec base-0 = 15 End String = ab

Articles intéressants...