c string conversion functions
Αυτό το σεμινάριο καλύπτει τις λειτουργίες μετατροπής συμβολοσειράς C ++ που μπορούν να χρησιμοποιηθούν για τη μετατροπή της συμβολοσειράς σε int & double και int σε string κλπ.:
Είναι σύνηθες να μετατρέπουμε συμβολοσειρά σε αριθμούς όπως ακέραιος και διπλός όταν αναπτύσσουμε εφαρμογές C ++.
Αυτό το θέμα καλύπτει τις λειτουργίες που μπορούν να χρησιμοποιηθούν για την αποτελεσματική μετατροπή των συμβολοσειρών σε int & διπλές και αριθμητικές τιμές σε μια συμβολοσειρά.
=> Διαβάστε τη δημοφιλή σειρά εκπαιδευτικών C ++ εδώ.
Τι θα μάθετε:
Λειτουργίες μετατροπής συμβολοσειράς C ++
Όταν προγραμματίζουμε εφαρμογές χρησιμοποιώντας C ++, καθίσταται απαραίτητη η μετατροπή δεδομένων από τον ένα τύπο στον άλλο. Η μετατροπή δεδομένων πρέπει να είναι τέτοια ώστε να μην χάνεται καθόλου δεδομένα όταν μετατρέπουμε τα υπάρχοντα δεδομένα σε νέο τύπο. Αυτό ισχύει ιδιαίτερα όταν μετατρέπουμε δεδομένα συμβολοσειράς σε αριθμούς και αντίστροφα.
Σε αυτό το σεμινάριο, θα συζητήσουμε τις διάφορες λειτουργίες για τη μετατροπή του αντικειμένου std :: string σε αριθμητικούς τύπους δεδομένων, όπως ακέραιος και διπλός.
Μετατροπή συμβολοσειράς σε αριθμητικούς τύπους σε C ++
Σε γενικές γραμμές, υπάρχουν δύο κοινές μέθοδοι για τη μετατροπή συμβολοσειράς σε αριθμούς στο C ++.
- Χρήση λειτουργιών stoi και atoi που αναπαράγονται για όλους τους αριθμητικούς τύπους δεδομένων.
- Χρήση κλάσης stringstream.
Ας συζητήσουμε λεπτομερώς κάθε μέθοδο.
Χρησιμοποιώντας τις λειτουργίες stoi και atoi
Το std :: string class υποστηρίζει διάφορες λειτουργίες για να μετατρέψει τη συμβολοσειρά σε ακέραιο, μακρύ, διπλό, float, κλπ. Οι συναρτήσεις μετατροπής που υποστηρίζονται από το std :: string είναι σε πίνακα ως εξής:
Λειτουργία | Περιγραφή |
---|---|
ορθοστασία έκλεψε κολλάω | Μετατρέπει τη συμβολοσειρά σε ακέραιο (συμπεριλαμβανομένων τύπων μεγάλου και μεγάλου μήκους). |
atoi κοραλλιογενές νησί κοραλλιογενές νησί | Μετατρέπει τη συμβολοσειρά byte σε ακέραιο (συμπεριλαμβανομένων τύπων μεγάλου και μεγάλου μήκους). |
στάθηκε σκόνη μπήκα | Μετατρέπει τη συμβολοσειρά byte σε τιμές κυμαινόμενου σημείου (συμπεριλαμβανομένων τύπων float, double και long double). |
σκαλί θα είμαι | Μετατρέπει τη συμβολοσειρά byte σε ακανόνιστο μη υπογεγραμμένο (συμπεριλαμβανομένων τύπων μεγάλου μήκους χωρίς υπογραφή και μεγάλου μήκους χωρίς υπογραφή). |
Σημείωση: Εκτός από τις συναρτήσεις για τη μετατροπή συμβολοσειράς byte (atoi), όλες οι άλλες λειτουργίες μετατροπής υπάρχουν από το C ++ 11 και μετά. Τώρα θα συζητήσουμε τις λειτουργίες μετατροπής για να μετατρέψουμε τη συμβολοσειρά σε int και τη συμβολοσειρά σε διπλή.
Συμβολοσειρά στο int Χρησιμοποιώντας stoi () και atoi ()
ορθοστασία()
συγχωνεύστε τον πηγαίο κώδικα c ++
Πρωτότυπο λειτουργίας: stoi (const std :: string & str, std :: size_t * pos = 0, int base = 10);
Παράμετροι):
str => Συμβολοσειρά για μετατροπή
pos => Διεύθυνση ενός ακέραιου για την αποθήκευση του αριθμού των επεξεργασμένων χαρακτήρων. προεπιλογή = 0
βάση => Η βάση αριθμών; προεπιλογή = 0
Αξία επιστροφής: Ορίστηκε ακέραιος ισοδύναμος με τη συμβολοσειρά.
Εξαιρέσεις: std :: valid_argument => Εάν δεν μπορεί να πραγματοποιηθεί μετατροπή.
Std :: out_of_range => Εάν η τιμή μετατροπής είναι εκτός εύρους του εύρους του τύπου αποτελέσματος.
Περιγραφή: Η συνάρτηση stoi () παίρνει μια συμβολοσειρά ως όρισμα και επιστρέφει μια ακέραια τιμή. Θα ρίξει μια εξαίρεση εάν η τιμή μετατροπής είναι εκτός εύρους ή εάν η μετατροπή δεν μπορεί να εκτελεστεί.
Ας πάρουμε ένα παράδειγμα προγραμματισμού για να κατανοήσουμε καλύτερα αυτήν τη λειτουργία.
#include #include using namespace std; int main() { string mystr1 = '53'; string mystr2 = '3.142'; string mystr3 = '31477 with char'; int strint1 = stoi(mystr1); int strint2 = stoi(mystr2); int strint3 = stoi(mystr3); cout << 'stoi('' << mystr1 << '') is ' << strint1 << '
'; cout << 'stoi('' << mystr2 << '') is ' << strint2 << '
'; cout << 'stoi('' << mystr3 << '') is ' << strint3 << '
'; }
Παραγωγή:
οι βάσεις ('53') είναι 53
οι βάσεις ('3.142') είναι 3
Το stoi ('31477 with char') είναι 31477
Στο παραπάνω πρόγραμμα, χρησιμοποιήσαμε τη λειτουργία stoi με τρεις διαφορετικές χορδές. Σημειώστε ότι ενώ μετατρέπετε τα δεδομένα συμβολοσειράς σε ακέραια τιμή, η συνάρτηση απορρίπτει τα κενά διαστήματα ή άλλους χαρακτήρες.
Ως εκ τούτου, στην περίπτωση του mystr2 (3.142), η συνάρτηση απορρίφθηκε τα πάντα μετά το δεκαδικό σημείο. Ομοίως, στην περίπτωση του mystr3 («31477 με char»), λήφθηκε υπόψη μόνο ο αριθμός. Άλλα περιεχόμενα της συμβολοσειράς απορρίφθηκαν.
atoi ()
Πρωτότυπο λειτουργίας: int atoi (const char * str);
Παράμετροι): str => Δείκτης για συμβολοσειρά byte με μηδενικό τερματισμό.
Αξία επιστροφής:
Επιτυχία => Ακεραία τιμή που αντιστοιχεί στο όρισμα str.
Αποτυχία => Απροσδιόριστο εάν η τιμή μετατροπής είναι εκτός εύρους.
0 => Εάν δεν μπορεί να πραγματοποιηθεί μετατροπή.
Περιγραφή: Αυτή η συνάρτηση μετατρέπει μια συμβολοσειρά byte σε ακέραια τιμή. Η συνάρτηση atoi () απορρίπτει οποιοδήποτε κενό διάστημα έως ότου συναντηθεί ένας χαρακτήρας χωρίς κενό διάστημα και στη συνέχεια παίρνει τους χαρακτήρες έναν προς έναν για να σχηματίσει μια έγκυρη αναπαράσταση ακέραιου αριθμού και τον μετατρέπει σε ακέραιο.
Παράδειγμα συνάρτησης atoi
#include #include using namespace std; int main() { const char *mystr1 = '24'; const char *mystr2 = '3.142'; const char *mystr3 = '23446 with char'; const char *mystr4 = 'words with 3'; int mynum1 = atoi(mystr1); int mynum2 = atoi(mystr2); int mynum3 = atoi(mystr3); int mynum4 = atoi(mystr4); cout << 'atoi('' << mystr1 << '') is ' << mynum1 << '
'; cout << 'atoi('' << mystr2 << '') is ' << mynum2 << '
'; cout << 'atoi('' << mystr3 << '') is ' << mynum3 << '
'; cout << 'atoi('' << mystr4 << '') is ' << mynum4 << '
'; }
Παραγωγή:
το atoi ('24') είναι 24
το atoi ('3.142') είναι 3
το atoi ('23446 με char') είναι 23446
Το atoi ('λέξεις με 3') είναι 0
Όπως φαίνεται στο παραπάνω πρόγραμμα, η συνάρτηση atoi παίρνει μια συμβολοσειρά byte ως όρισμα και τη μετατρέπει σε ακέραια τιμή. Τα λευκά κενά ή οι άλλοι χαρακτήρες απορρίπτονται. Εάν η τιμή μετατροπής είναι εκτός εύρους, επιστρέφεται το 0.
Συμβολοσειρά στο διπλό Χρησιμοποιώντας stod ()
Πρωτότυπο λειτουργίας: stod (const std :: string & str, std :: size_t * pos = 0);
Παράμετροι):
str => Συμβολοσειρά για μετατροπή
pos => Διεύθυνση ενός ακέραιου για την αποθήκευση του αριθμού των επεξεργασμένων χαρακτήρων. προεπιλογή = 0
Αξία επιστροφής: Διπλή τιμή ισοδύναμη με την καθορισμένη συμβολοσειρά.
Εξαιρέσεις:
std :: valid_argument => Εάν δεν μπορεί να πραγματοποιηθεί μετατροπή.
std :: out_of_range => Εάν η τιμή μετατροπής είναι εκτός εύρους του εύρους του τύπου αποτελέσματος.
Περιγραφή: Αυτή η συνάρτηση μετατρέπει μια συμβολοσειρά σε τιμή κυμαινόμενου σημείου. Η συνάρτηση stod () απορρίπτει οποιοδήποτε κενό διάστημα έως ότου συναντηθεί ένας χαρακτήρας χωρίς κενό διάστημα και στη συνέχεια παίρνει τους χαρακτήρες έναν προς έναν για να σχηματίσει μια έγκυρη αναπαράσταση αριθμού κυμαινόμενου σημείου και τον μετατρέπει σε κινούμενο σημείο.
Ας δούμε ένα παράδειγμα που αποδεικνύει αυτήν τη λειτουργία.
#include #include using namespace std; int main() { const char *mystr1 = '24'; const char *mystr2 = '3.142'; const char *mystr3 = '23446 with char'; double mynum1 = stod(mystr1); double mynum2 = stod(mystr2); double mynum3 = stod(mystr3); cout << 'stod('' << mystr1 << '') is ' << mynum1 << '
'; cout << 'stod('' << mystr2 << '') is ' << mynum2 << '
'; cout << 'stod('' << mystr3 << '') is ' << mynum3 << '
'; }
Παραγωγή:
Το stod ('24') είναι 24
Το stod ('3.142') είναι 3.142
stod ('23446 με char') είναι 23446
Το παραπάνω πρόγραμμα δείχνει τη χρήση της λειτουργίας «stod». Η έξοδος υποδεικνύει τις διπλές τιμές που έχουν μετατραπεί στις καθορισμένες συμβολοσειρές.
Χρησιμοποιώντας stringstream Class
Η χρήση της κατηγορίας stringstream είναι ο ευκολότερος τρόπος για τη μετατροπή τιμών συμβολοσειρών σε αριθμητικές τιμές.
Θα μάθουμε αναλυτικά την τάξη stringstream στα επόμενα σεμινάρια μας. Δίνεται παρακάτω ένα πρόγραμμα C ++ που δείχνει τη μετατροπή της συμβολοσειράς σε αριθμητικές τιμές.
#include #include using namespace std; int main() { string str = '2508'; stringstream sstream(str); int num = 0; sstream >> num; double dNum=0.0; string doublestr = '3.142'; stringstream dstream(doublestr); dstream >>dNum; cout << 'Value of num : ' << num< Παραγωγή:
Τιμή αριθμού: 2508
Τιμή dNum: 3.142
Στο παραπάνω πρόγραμμα, βλέπουμε ότι έχουμε δηλώσει ένα αντικείμενο συμβολοσειράς. Στη συνέχεια δηλώνουμε ένα αντικείμενο stringstream και μεταδίδουμε τη συμβολοσειρά σε αυτό το αντικείμενο έτσι ώστε η συμβολοσειρά να μετατραπεί σε αντικείμενο stringstream. Στη συνέχεια, αυτό το αντικείμενο stringstream μεταφέρεται σε ακέραια τιμή χρησιμοποιώντας τον τελεστή «>>» που μετατρέπει το αντικείμενο stringstream σε ακέραιο.
Ομοίως, έχουμε επίσης μετατρέψει τη συμβολοσειρά σε διπλή. Εφόσον ο χειριστής '>>' υποστηρίζει τον τύπο δεδομένων, μπορούμε να μετατρέψουμε μια συμβολοσειρά σε οποιονδήποτε τύπο δεδομένων χρησιμοποιώντας ένα αντικείμενο ροής συμβολοσειράς.
Μετατροπή int σε συμβολοσειρά σε C ++
Μπορούμε επίσης να μετατρέψουμε αριθμητικές τιμές σε τιμές συμβολοσειράς. Υπάρχουν δύο μέθοδοι μετατροπής αριθμητικών τιμών σε τιμές συμβολοσειράς και θα συζητήσουμε αυτές παρακάτω.
Χρήση της συνάρτησης to_string ()
Πρωτότυπο λειτουργίας: std :: string to_string (τιμή τύπου);
Παράμετροι): τιμή => Αριθμητική τιμή για μετατροπή
Αξία επιστροφής: Τιμή συμβολοσειράς που κρατά την τιμή μετατροπής.
Εξαίρεση: μπορεί να ρίξει std :: bad_alloc
Περιγραφή: Αυτή η συνάρτηση to_string () μετατρέπει την αριθμητική τιμή που μεταβιβάστηκε ως όρισμα σε τύπο συμβολοσειράς και επιστρέφει τη συμβολοσειρά.
Ας δούμε ένα παράδειγμα αυτής της λειτουργίας χρησιμοποιώντας ένα πρόγραμμα C ++.
#include #include // used for string and to_string() using namespace std; int main() { int int_val = 20; float flt_val = 30.50; string str_int = to_string(int_val); string str_float = to_string(flt_val); cout << 'The string representation of integer : '; cout << str_int << endl; cout << 'The string representation of float : '; cout << str_float << endl; return 0; }
Παραγωγή:
Η παράσταση συμβολοσειράς του ακέραιου: 20 Η παράσταση συμβολοσειράς του float: 30.500000
Εδώ έχουμε δύο μεταβλητές, καθεμία από τον ακέραιο τύπο και το float. Στη συνέχεια καλούμε τη μέθοδο to_string δύο φορές με ακέραιο και float όρισμα και μετατρέπουμε και τις δύο τιμές σε τιμές συμβολοσειράς. Τέλος, εμφανίζουμε τις τιμές μετατροπής.
Σημειώστε ότι η μετατροπή της τιμής κινητού σημείου στη συμβολοσειρά μπορεί να δώσει απρόσμενα αποτελέσματα καθώς ο αριθμός των σημαντικών ψηφίων μπορεί να είναι μηδέν με τη μέθοδο to_string.
Χρησιμοποιώντας stringstream Class
Χρησιμοποιώντας stringstream class, το stringstream δηλώνει πρώτα ένα αντικείμενο ροής που εισάγει μια αριθμητική τιμή ως ροή στο αντικείμενο. Στη συνέχεια, χρησιμοποιεί τη συνάρτηση 'str ()' για να μετατρέψει εσωτερικά μια αριθμητική τιμή σε συμβολοσειρά.
Παράδειγμα:
#include #include #include using namespace std; int main() { int num = 26082019; double num_d = 3.142; ostringstream mystr; ostringstream my_dstr; mystr << num; string resultstr = mystr.str(); my_dstr << num_d; string d_str = my_dstr.str(); cout << 'The string formed from integer is : '; cout << resultstr << endl; cout << 'The string formed from double is : '; cout << d_str << endl; return 0; } #include #include #include using namespace std; int main() { int num = 26082019; double num_d = 3.142; ostringstream mystr; ostringstream my_dstr; mystr << num; string resultstr = mystr.str(); my_dstr << num_d; string d_str = my_dstr.str(); cout << 'The string formed from integer is : '; cout << resultstr << endl; cout << 'The string formed from double is : '; cout << d_str << endl; return 0; }
Παραγωγή:
Η συμβολοσειρά που σχηματίζεται από ακέραιο είναι: 26082019
Η συμβολοσειρά που σχηματίζεται από το διπλό είναι: 3.142
Σε αυτήν την καταχώριση, έχουμε ορίσει έναν ακέραιο και μια διπλή τιμή. Έπειτα έχουμε το αντικείμενο ostringstream χρησιμοποιώντας το οποίο καλύπτουμε την αριθμητική τιμή στο αντικείμενο stringstream. Αυτό χρησιμοποιεί το «<<’ operator. Next, we use the str() method on a stringstream object to convert it to a string.
συμπέρασμα
Σε αυτό το σεμινάριο, συζητήσαμε τις λειτουργίες μετατροπής που μετατρέπουν μια συμβολοσειρά σε αριθμητικούς τύπους και αριθμητικούς τύπους πίσω σε μια συμβολοσειρά. Έχουμε δει λεπτομερώς τις λειτουργίες και τα παραδείγματα της λειτουργίας stoi (), stod (), atoi (), to_string (). Συζητήσαμε επίσης μερικές από τις συναρτήσεις και τις μεθόδους της κατηγορίας stringstream που μας βοηθούν να κάνουμε τις αναφερόμενες μετατροπές.
Συνιστώμενη ανάγνωση = >> Μετατροπή συμβολοσειράς σε ακέραιο στην Java και Μέθοδοι μετατροπής Int σε συμβολοσειρά σε Java
Στο επόμενο σεμινάριό μας, θα μάθουμε συναρτήσεις μετατροπής για τύπους δεδομένων χαρακτήρων.
=> Δείτε τα εκπαιδευτικά σεμινάρια In-Depth C ++ εδώ.
Συνιστώμενη ανάγνωση
- Λειτουργίες συμβολοσειράς Python
- Λειτουργίες μετατροπής χαρακτήρων C ++: char σε int, char σε string
- Java String με String Buffer και String Builder Tutorial
- Λειτουργίες συμβολοσειράς στο C ++: getline, substring, string string & More
- C # Μετατροπή συμβολοσειράς σε Int χρησιμοποιώντας μεθόδους Parse, Convert & TryParse
- Λειτουργίες συμβολοσειράς VBScript: Λειτουργίες VBScript inStr, Replace, Mid και Trim
- Εκμάθηση Python String Split
- C # String Tutorial - Μέθοδοι συμβολοσειράς με παραδείγματα κώδικα