A função strtol () em C ++ interpreta o conteúdo de uma string como um número inteiro da base especificada e retorna seu valor como um int longo.
A função strtol () em C ++ interpreta o conteúdo de uma string como um número inteiro da base especificada e retorna seu valor como um int longo. Esta função também define um ponteiro para apontar para o primeiro caractere após o último caractere válido da string, se houver algum, caso contrário, o ponteiro é definido como nulo.
Para a base 10 e a string "12abc": Parte numérica válida -> 12 Primeiro caractere após a parte numérica válida -> a
protótipo strtol () (a partir do padrão C ++ 11)
longo int strtol (const char * str, char ** end, int base);
A função strtol () recebe string, um ponteiro para o caractere e um valor inteiro - base como seu parâmetro, interpreta o conteúdo da string como um número inteiro da base fornecida e retorna um valor inteiro longo.
Esta função é definida no arquivo de cabeçalho.
Parâmetros strtol ()
str:
Uma string com a representação de um número inteiro.end:
Referência a um objeto já alocado do tipo char *. O valor de fim é definido pela função para o próximo caractere em str após o último caractere válido. Este parâmetro também pode ser um ponteiro nulo, caso em que não é usado.base:
A base do valor integral. O conjunto de valores válidos para a base é (0, 2, 3,…, 35, 36).
strtol () Valor de retorno
A função strtol () retorna:
- um valor int longo (que é convertido da string).
- 0 se nenhuma conversão válida puder ser realizada.
Exemplo 1: Como strtol () funciona em 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; )
Quando você executa o programa, a saída será:
Número na String = 27ab_1x Número em Long Int = 27 End String = ab_1x Número na String = 27 Número em Long Int = 27 Ponteiro nulo
Um valor inteiro válido para a função strtol () consiste em:
- Um sinal opcional + ou -.
- Um prefixo 0 para base octal (aplica-se apenas quando base = 8 ou 0).
- Um prefixo 0x ou 0X para base hexadecimal (aplica-se apenas quando base = 16 ou 0).
- Uma sequência de dígitos e / ou alfabetos (se a base for maior que 10).
Os valores válidos para a base do parâmetro são (0, 2, 3,…, 35, 36). Um conjunto de dígitos válidos para a base 2 é (0, 1), para a base 3 é (0, 1, 2) e assim por diante. Para bases de 11 a 36, os dígitos válidos incluem alfabetos. O conjunto de dígitos válidos para a base 11 é (0, 1,…, 9, A, a), para a base 12 é (0, 1,…, 9, A, a, B, b) e assim por diante.
Nota: É importante lembrar que um caractere válido para uma base pode terminar na string inválida para outra base como no exemplo abaixo.
Exemplo 2: função strtol () com bases diferentes
#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; )
Quando você executa o programa, a saída será:
128bz para Long Int com base-5 = 7 End String = 8bxz 128bz para Long Int com base-12 = 2123 End String = xz 128bz para Long Int com base-36 = 64214135 End String =
A função strtol () ignora todos os caracteres de espaço em branco iniciais até que o caractere de espaço em branco principal seja encontrado.
Em geral, um argumento inteiro válido para a função strtol () tem o seguinte formato:
(espaço em branco) (- | +) (0 | 0x) (caracteres alfanuméricos)
Então, começando com este caractere, ele pega tantos caracteres quanto possível que forma uma representação de inteiro válida e os converte em um valor inteiro longo. O que restar da string após o último caractere válido é ignorado e não tem efeito no resultado.
Exemplo 3: função strtol () para espaço em branco inicial e conversão inválida
#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; )
Quando você executa o programa, a saída será:
25axbz para Long Int com base-11 = 307 End String = xbz 110bcd para Long Int com base-2 = 6 End String = bcd ax110.97 para Long Int com base-10 = 0 End String = ax110.97
Se a base for 0, a base numérica é determinada automaticamente observando o formato da string. Se o prefixo for 0, a base é octal (8). Se o prefixo for 0x ou 0X, a base é hexadecimal (16), caso contrário, a base é decimal (10).
Exemplo 4: função strtol () com 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; )
Quando você executa o programa, a saída será:
0128ai para Long Int com base-0 = 10 End String = 8ai 0x15axzz para Long Int com base-0 = 346 End String = xzz 23dfl para Long Int com base-0 = 23 End String = dfl