C ++ strtol () - C ++ Standard Βιβλιοθήκη

Η συνάρτηση strtol () στο C ++ ερμηνεύει τα περιεχόμενα μιας συμβολοσειράς ως αναπόσπαστο αριθμό της καθορισμένης βάσης και επιστρέφει την τιμή της ως ένα μεγάλο int.

Η συνάρτηση strtol () στο C ++ ερμηνεύει τα περιεχόμενα μιας συμβολοσειράς ως αναπόσπαστο αριθμό της καθορισμένης βάσης και επιστρέφει την τιμή της ως ένα μεγάλο int. Αυτή η συνάρτηση ορίζει επίσης ένα δείκτη για να δείχνει στον πρώτο χαρακτήρα μετά τον τελευταίο έγκυρο χαρακτήρα της συμβολοσειράς, εάν υπάρχει, διαφορετικά ο δείκτης έχει οριστεί σε μηδέν.

 Για τη βάση 10 και τη συμβολοσειρά "12abc": Έγκυρο αριθμητικό μέρος -> 12 Πρώτος χαρακτήρας μετά από έγκυρο αριθμητικό μέρος -> α

πρωτότυπο strtol () (Από το πρότυπο C ++ 11)

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

Η συνάρτηση strtol () παίρνει συμβολοσειρά, δείκτη προς χαρακτήρα και ακέραια τιμή - βάση ως παράμετρος της, ερμηνεύει το περιεχόμενο της συμβολοσειράς ως αναπόσπαστο αριθμό της δεδομένης βάσης και επιστρέφει μια μεγάλη τιμή int.

Αυτή η συνάρτηση ορίζεται στο αρχείο κεφαλίδας.

παράμετροι strtol ()

  • str: Μια συμβολοσειρά που έχει την αναπαράσταση ενός ακέραιου αριθμού.
  • end:Αναφορά σε ένα ήδη κατανεμημένο αντικείμενο τύπου char *. Η τιμή του τέλους ορίζεται από τη συνάρτηση στον επόμενο χαρακτήρα σε str μετά τον τελευταίο έγκυρο χαρακτήρα. Αυτή η παράμετρος μπορεί επίσης να είναι μηδενικός δείκτης, οπότε δεν χρησιμοποιείται.
  • base:Η βάση της ακέραιας τιμής. Το σύνολο των έγκυρων τιμών για τη βάση είναι (0, 2, 3,…, 35, 36).

strtol () Τιμή επιστροφής

Η συνάρτηση strtol () επιστρέφει:

  • μια μεγάλη τιμή int (η οποία μετατρέπεται από τη συμβολοσειρά).
  • 0 εάν δεν μπορούσε να γίνει έγκυρη μετατροπή.

Παράδειγμα 1: Πώς λειτουργεί το strtol () στο 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; ) 

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Αριθμός σε String = 27ab_1x Αριθμός σε Long Int = 27 End String = ab_1x Αριθμός σε String = 27 Αριθμός σε Long Int = 27 Null δείκτης

Μια έγκυρη ακέραια τιμή για τη συνάρτηση strtol () αποτελείται από:

  • Ένα προαιρετικό σύμβολο + ή -.
  • Ένα πρόθεμα 0 για οκταδική βάση (ισχύει μόνο όταν βάση = 8 ή 0).
  • Πρόθεμα 0x ή 0X για δεκαεξαδική βάση (ισχύει μόνο όταν η βάση = 16 ή 0).
  • Μια ακολουθία ψηφίων ή / και αλφαβήτων (εάν η βάση είναι μεγαλύτερη από 10)

Οι έγκυρες τιμές για τη βάση παραμέτρων είναι (0, 2, 3,…, 35, 36). Ένα σύνολο έγκυρων ψηφίων για τη βάση 2 είναι (0, 1), για τη βάση 3 είναι (0, 1, 2) και ούτω καθεξής. Για βάσεις που ξεκινούν από 11 έως 36, τα έγκυρα ψηφία περιλαμβάνουν αλφάβητα. Το σύνολο των έγκυρων ψηφίων για τη βάση 11 είναι (0, 1,…, 9, A, a), για τη βάση 12 είναι (0, 1,…, 9, A, a, B, b) και ούτω καθεξής.

Σημείωση: Είναι σημαντικό να θυμάστε ότι ένας έγκυρος χαρακτήρας για μία βάση μπορεί να καταλήξει στη μη έγκυρη συμβολοσειρά για μια άλλη βάση, όπως στο παρακάτω παράδειγμα.

Παράδειγμα 2: λειτουργία strtol () με διαφορετικές βάσεις

 #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; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 128bz έως Long Int με βάση-5 = 7 End String = 8bxz 128bz έως Long Int με βάση-12 = 2123 End String = xz 128bz έως Long Int με βάση-36 = 64214135 End String = 

Η συνάρτηση strtol () αγνοεί όλους τους κύριους χαρακτήρες του διαστήματος έως ότου βρεθεί ο κύριος χαρακτήρας εκτός κενού χώρου.

Γενικά, ένα έγκυρο ακέραιο όρισμα για τη συνάρτηση strtol () έχει την ακόλουθη μορφή:

 (κενό διάστημα) (- | +) (0 | 0x) (αλφαριθμητικοί χαρακτήρες)

Στη συνέχεια, ξεκινώντας από αυτόν τον χαρακτήρα, παίρνει όσο το δυνατόν περισσότερους χαρακτήρες που σχηματίζουν μια έγκυρη ακέραια αναπαράσταση και τους μετατρέπει σε μια μεγάλη τιμή int. Ό, τι απομένει από τη συμβολοσειρά μετά τον τελευταίο έγκυρο χαρακτήρα αγνοείται και δεν επηρεάζει το αποτέλεσμα.

Παράδειγμα 3: συνάρτηση strtol () για κορυφαίο κενό διάστημα και μη έγκυρη μετατροπή

 #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; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 25axbz έως Long Int με βάση-11 = 307 End String = xbz 110bcd to Long Int με βάση-2 = 6 End String = bcd ax110.97 to Long Int με βάση-10 = 0 End String = ax110.97 

Εάν η βάση είναι 0, η αριθμητική βάση καθορίζεται αυτόματα εξετάζοντας τη μορφή της συμβολοσειράς. Εάν το πρόθεμα είναι 0, η βάση είναι οκτάλη (8). Εάν το πρόθεμα είναι 0x ή 0X, η βάση είναι δεκαεξαδική (16), διαφορετικά η βάση είναι δεκαδική (10).

Παράδειγμα 4: συνάρτηση strtol () με βάση 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; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

0128ai έως Long Int με βάση-0 = 10 End String = 8ai 0x15axzz to Long Int με βάση-0 = 346 End String = xzz 23dfl έως Long Int με βάση-0 = 23 End String = dfl 

ενδιαφέροντα άρθρα...