función strtoumax() en C++

La función strtoumax() en C++ interpreta el contenido de una string como un número entero de la base especificada y devuelve su valor como uintmax_t (entero sin signo de ancho máximo). Esta función también establece un puntero final que apunta al primer carácter después del último carácter numérico válido de la string; si no existe tal carácter, el puntero se establece en nulo. El valor de retorno se establece en valor de basura cuando se ingresa un número negativo como una string. Esta función se define en el archivo de encabezado cinttypes .

Sintaxis:

uintmax_t strtoumax(const char* str, char** end, int base)

Parámetro: La función acepta tres parámetros obligatorios que se describen a continuación:

  • str: especifica que una string consta de un número entero.
  • end: especifica una referencia a un objeto de tipo char*. La función establece el valor de end en el siguiente carácter de str después del último carácter numérico válido. Este parámetro también puede ser un puntero nulo, en caso de que no se utilice.
  • base: especifica la base numérica (base) que determina los caracteres válidos y su interpretación en la string

Tipo de devolución: la función strtoimax() devuelve dos valores que se describen a continuación:

  • Si se produce una conversión válida, la función devuelve el número entero convertido como valor entero.
  • Si no se pudo realizar una conversión válida y si la string incluye el signo menos con el número entero correspondiente, la función devuelve el valor basura; de lo contrario, se devuelve un valor cero (0)

Los siguientes programas ilustran la función anterior:

Programa 1:

// C++ program to illustrate the
// strtoumax() function
#include <iostream>
#include<cinttypes>
#include<cstring>
  
using namespace std;
  
// Driver code
int main()
{
    int base = 10;
    char str[] = "999999abcdefg";
    char* end;
    uintmax_t num;
  
    num = strtoumax(str, &end, base);
    cout << "Given String = " << str << endl;
    cout << "Number with base 10 in string " << num << endl;
    cout << "End String points to " << end << endl
         << endl;
  
    // in this case the end pointer points to null
    // here base change to char16
    base = 2;
    strcpy(str, "10010");
    cout << "Given String = " << str << endl;
    num = strtoumax(str, &end, base);
    cout << "Number with base 2 in string " << num << endl;
    if (*end) {
        cout << end;
    }
    else {
        cout << "Null pointer";
    }
    return 0;
}
Producción:

Given String = 999999abcdefg
Number with base 10 in string 999999
End String points to abcdefg

Given String = 10010
Number with base 2 in string 18
Null pointer

Programa 2:

// C++ program to illustrate the
// strtoumax() function
#include <iostream>
#include<cinttypes>
#include<cstring>
  
using namespace std;
  
// Driver code
int main()
{
    int base = 10;
    char str[] = "-10000";
    char* end;
    uintmax_t num;
    // if negative value is converted then it gives garbage value
    num = strtoumax(str, &end, base);
    cout << "Given String = " << str << endl;
    cout << "Garbage value stored in num " << num << endl;
    if (*end) {
        cout << "End String points to " << end;
    }
    else {
        cout << "Null pointer" << endl
             << endl;
    }
  
    // in this case no numeric character is there
    // so the function returns 0
    base = 10;
    strcpy(str, "abcd");
    cout << "Given String = " << str << endl;
    num = strtoumax(str, &end, base);
    cout << "Number with base 10 in string " << num << endl;
    if (*end) {
        cout << "End String points to " << end;
    }
    else {
        cout << "Null pointer";
    }
    return 0;
}
Producción:

Given String = -10000
Garbage value stored in num 18446744073709541616
Null pointer

Given String = abcd
Number with base 10 in string 0
End String points to abcd

Publicación traducida automáticamente

Artículo escrito por Aman Goyal 2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *