C ++ strtol () - Libreria standard C ++

La funzione strtol () in C ++ interpreta il contenuto di una stringa come un numero intero della base specificata e restituisce il suo valore come un int lungo.

La funzione strtol () in C ++ interpreta il contenuto di una stringa come un numero intero della base specificata e restituisce il suo valore come un int lungo. Questa funzione imposta anche un puntatore in modo che punti al primo carattere dopo l'ultimo carattere valido della stringa, se presente, altrimenti il ​​puntatore viene impostato su null.

 Per la base 10 e la stringa "12abc": Parte numerica valida -> 12 Primo carattere dopo la parte numerica valida -> a

prototipo strtol () (come dallo standard C ++ 11)

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

La funzione strtol () accetta string, un puntatore a carattere e un valore intero - base come parametro, interpreta il contenuto di stringa come un numero intero della base data e restituisce un valore int lungo.

Questa funzione è definita nel file di intestazione.

Parametri strtol ()

  • str: Una stringa avente la rappresentazione di un numero intero.
  • end:Riferimento a un oggetto già allocato di tipo char *. Il valore di end è impostato dalla funzione sul carattere successivo in str dopo l'ultimo carattere valido. Questo parametro può anche essere un puntatore nullo, nel qual caso non viene utilizzato.
  • base:La base del valore integrale. Il set di valori validi per la base è (0, 2, 3,…, 35, 36).

strtol () Restituisce il valore

La funzione strtol () restituisce:

  • un valore int lungo (che viene convertito dalla stringa).
  • 0 se non è stato possibile eseguire una conversione valida.

Esempio 1: come funziona strtol () in 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 esegui il programma, l'output sarà:

 Numero in stringa = 27ab_1x Numero in lungo Int = 27 Fine stringa = ab_1x Numero in stringa = 27 Numero in lungo Int = 27 Puntatore nullo

Un valore intero valido per la funzione strtol () è costituito da:

  • Un segno + o - opzionale.
  • Un prefisso 0 per base ottale (si applica solo quando base = 8 o 0).
  • Un prefisso 0x o 0X per base esadecimale (si applica solo quando base = 16 o 0).
  • Una sequenza di cifre e / o alfabeti (se la base è maggiore di 10).

I valori validi per la base del parametro sono (0, 2, 3,…, 35, 36). Un insieme di cifre valide per la base 2 è (0, 1), per la base 3 è (0, 1, 2) e così via. Per le basi che vanno da 11 a 36, ​​le cifre valide includono gli alfabeti. L'insieme di cifre valide per la base 11 è (0, 1,…, 9, A, a), per la base 12 è (0, 1,…, 9, A, a, B, b) e così via.

Nota: è importante ricordare che un carattere valido per una base può finire nella stringa non valida per un'altra base come nell'esempio seguente.

Esempio 2: funzione strtol () con basi diverse

 #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 esegui il programma, l'output sarà:

 Da 128bz a Long Int con base-5 = 7 End String = 8bxz Da 128bz a Long Int con base-12 = 2123 End String = xz 128bz a Long Int con base-36 = 64214135 End String = 

La funzione strtol () ignora tutti i caratteri di spazi bianchi iniziali fino a quando non viene trovato il carattere principale diverso da spazi.

In generale, un argomento intero valido per la funzione strtol () ha la seguente forma:

 (spazi) (- | +) (0 | 0x) (caratteri alfanumerici)

Quindi, a partire da questo carattere, prende il maggior numero di caratteri possibile che forma una rappresentazione intera valida e li converte in un valore int lungo. Tutto ciò che resta della stringa dopo l'ultimo carattere valido viene ignorato e non ha alcun effetto sul risultato.

Esempio 3: funzione strtol () per spazi bianchi iniziali e conversione non valida

 #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 esegui il programma, l'output sarà:

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

Se la base è 0, la base numerica viene determinata automaticamente guardando il formato della stringa. Se il prefisso è 0, la base è ottale (8). Se il prefisso è 0x o 0X, la base è esadecimale (16), altrimenti la base è decimale (10).

Esempio 4: funzione strtol () con 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 esegui il programma, l'output sarà:

Da 0128ai a Long Int con base-0 = 10 End String = 8ai 0x15axzz a Long Int con base-0 = 346 End String = xzz 23dfl a Long Int con base-0 = 23 End String = dfl 

Articoli interessanti...