c string conversion functions
Ten samouczek obejmuje funkcje konwersji ciągów w języku C ++, których można użyć do przekonwertowania ciągu znaków na int & double oraz int na ciąg itp .:
Podczas tworzenia aplikacji C ++ często konwertuje się ciąg na liczby, takie jak liczby całkowite i podwójne.
W tym temacie omówiono funkcje, których można użyć do efektywnej konwersji ciągów na ciągi int i double oraz wartości liczbowe na ciąg.
=> Przeczytaj popularne serie szkoleń C ++ tutaj.
Czego się nauczysz:
Funkcje konwersji ciągów C ++
Kiedy programujemy aplikacje w C ++, konieczna jest konwersja danych z jednego typu na inny. Konwersja danych powinna być taka, aby żadne dane nie zostały utracone podczas konwersji istniejących danych na nowy typ. Jest to szczególnie ważne, gdy konwertujemy dane łańcuchowe na liczby i odwrotnie.
W tym samouczku omówimy różne funkcje służące do konwersji obiektu std :: string na numeryczne typy danych, w tym liczby całkowite i podwójne.
Konwertuj ciąg na typy liczbowe w C ++
Ogólnie rzecz biorąc, istnieją dwie typowe metody konwersji ciągów znaków na liczby w C ++.
- Używanie funkcji stoi i atoi, które są replikowane dla wszystkich numerycznych typów danych.
- Korzystanie z klasy stringstream.
Omówmy szczegółowo każdą metodę.
Korzystanie stoi i atoi Funkcje
Klasa std :: string obsługuje różne funkcje konwertowania łańcuchów znaków na liczby całkowite, długie, podwójne, zmiennoprzecinkowe itp. Funkcje konwersji obsługiwane przez std :: string są zestawione w tabeli w następujący sposób:
Funkcjonować | Opis |
---|---|
stoi stol stoll | Konwertuje ciąg znaków na liczbę całkowitą (w tym długie i długie typy). |
atoi atol atol | Konwertuje ciąg bajtów na liczbę całkowitą (w tym długie i długie typy). |
stał kurz stold | Konwertuje ciąg bajtów na wartości zmiennoprzecinkowe (w tym typy zmiennoprzecinkowe, podwójne i długie podwójne). |
stoul stoull | Konwertuje ciąg bajtów na liczbę całkowitą bez znaku (w tym typy długie bez znaku i długie bez znaku). |
Uwaga: Z wyjątkiem funkcji do konwersji ciągu bajtów (atoi), wszystkie inne funkcje konwersji są obecne od C ++ 11 wzwyż. Teraz omówimy funkcje konwersji do konwersji string na int i string na double.
Ciąg do int Używanie stoi () i atoi ()
stoi()
Prototyp funkcji: stoi (const std :: string & str, std :: size_t * pos = 0, int base = 10);
Parametr (y):
str => Ciąg do konwersji
pos => Adres liczby całkowitej do przechowywania liczby przetworzonych znaków; domyślnie = 0
podstawa => podstawa liczb; domyślnie = 0
Wartość zwracana: Liczba całkowita odpowiadająca określonemu ciągowi.
Wyjątki: std :: invalid_argument => Jeśli nie można przeprowadzić żadnej konwersji.
Std :: out_of_range => Jeśli przekonwertowana wartość jest poza zakresem typu wyniku.
Opis: Funkcja stoi () przyjmuje ciąg znaków jako argument i zwraca wartość całkowitą. Spowoduje to zgłoszenie wyjątku, jeśli przekonwertowana wartość jest poza zakresem lub jeśli nie można wykonać konwersji.
Weźmy przykład programowania, aby lepiej zrozumieć tę funkcję.
#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 << '
'; }
Wynik:
stand („53”) to 53
stand („3,142”) to 3
stoi („31477 ze znakiem”) to 31477
W powyższym programie użyliśmy funkcji stoi z trzema różnymi napisami. Zauważ, że podczas konwersji danych ciągu na wartość całkowitą, funkcja odrzuca białe spacje lub inne znaki.
Stąd w przypadku mystr2 (3.142) funkcja odrzucała wszystko po przecinku. Podobnie w przypadku mystr3 („31477 z char”) pod uwagę brana była tylko liczba. Pozostała zawartość sznurka została odrzucona.
atoi ()
Prototyp funkcji: int atoi (const char * str);
Parametr (y): str => Wskaźnik do ciągu bajtów zakończonych znakiem null.
Wartość zwracana:
Success => Wartość całkowita odpowiadająca argumentowi str.
Failure => Undefined, jeśli przekonwertowana wartość jest poza zakresem.
0 => Jeśli nie można przeprowadzić żadnej konwersji.
Opis: Ta funkcja konwertuje ciąg bajtów na wartość całkowitą. Funkcja atoi () odrzuca wszelkie białe spacje, dopóki nie zostanie napotkany znak niebędący białymi znakami, a następnie pobiera znaki jeden po drugim, tworząc prawidłową reprezentację liczby całkowitej i konwertuje ją na liczbę całkowitą.
Przykład funkcji 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 << '
'; }
Wynik:
atoi („24”) to 24
atoi („3,142”) wynosi 3
atoi („23446 z char”) to 23446
atoi („słowa z 3”) to 0
Jak pokazano w powyższym programie, funkcja atoi przyjmuje ciąg bajtów jako argument i konwertuje go na wartość całkowitą. Spacje lub inne znaki są odrzucane. Jeśli przekonwertowana wartość jest poza zakresem, zwracane jest 0.
Ciąg do podwojenia za pomocą stod ()
Prototyp funkcji: stod (const std :: string & str, std :: size_t * pos = 0);
Parametr (y):
str => Ciąg do konwersji
pos => Adres liczby całkowitej do przechowywania liczby przetworzonych znaków; domyślnie = 0
Wartość zwracana: Podwójna wartość odpowiadająca podanemu ciągowi.
Wyjątki:
std :: invalid_argument => Jeśli nie można przeprowadzić żadnej konwersji.
std :: out_of_range => Jeśli przekonwertowana wartość jest poza zakresem typu wyniku.
Opis: Ta funkcja konwertuje ciąg znaków na wartość zmiennoprzecinkową. Funkcja stod () odrzuca wszelkie białe spacje, dopóki nie zostanie napotkany znak niebędący białymi znakami, a następnie pobiera znaki jeden po drugim, aby utworzyć prawidłową reprezentację liczby zmiennoprzecinkowej i konwertuje ją na zmiennoprzecinkową.
Zobaczmy przykład demonstrujący tę funkcję.
jak otworzyć plik bin w systemie Windows 10
#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 << '
'; }
Wynik:
stod („24”) to 24
stod („3,142”) wynosi 3,142
stod („23446 z char”) to 23446
Powyższy program demonstruje użycie funkcji „stod”. Dane wyjściowe wskazują przekonwertowane podwójne wartości określonych ciągów.
Korzystanie z klasy stringstream
Użycie klasy stringstream jest najłatwiejszym sposobem konwersji wartości łańcuchowych na wartości liczbowe.
W kolejnych tutorialach będziemy szczegółowo uczyć się klasy stringstream. Poniżej podano program w C ++, który demonstruje konwersję ciągu znaków na wartości liczbowe.
#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< Wynik:
Wartość num: 2508
Wartość dNum: 3,142
W powyższym programie widzimy, że zadeklarowaliśmy obiekt typu string. Następnie deklarujemy obiekt typu stringstream i przekazujemy ciąg do tego obiektu, aby łańcuch został przekonwertowany na obiekt typu stringstream. Następnie ten obiekt stringstream jest przekazywany do wartości całkowitej za pomocą operatora „>>”, który konwertuje obiekt stringstream na liczbę całkowitą.
Podobnie, przekonwertowaliśmy również ciąg na double. Tak długo, jak operator „>>” obsługuje typ danych, możemy przekształcić ciąg znaków w dowolny typ danych przy użyciu obiektu stringstream.
Konwertuj int na string w C ++
Możemy również konwertować wartości numeryczne na łańcuchowe. Istnieją dwie metody konwersji wartości liczbowych na ciągi znaków, które omówimy poniżej.
Korzystanie z funkcji to_string ()
Prototyp funkcji: std :: string to_string (wartość typu);
Parametr (y): wartość => Wartość liczbowa do konwersji
Wartość zwracana: Wartość ciągu przechowująca przekonwertowaną wartość.
Wyjątek: może wyrzucić std :: bad_alloc
Opis: Ta funkcja to_string () konwertuje wartość liczbową przekazaną jako argument na typ łańcuchowy i zwraca ciąg.
Zobaczmy przykład tej funkcji w programie w 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; }
Wynik:
Łańcuch reprezentujący liczbę całkowitą: 20 Łańcuch reprezentujący liczbę zmiennoprzecinkową: 30,500000
Tutaj mamy dwie zmienne, każda typu integer i float. Następnie dwukrotnie wywołujemy metodę to_string z argumentem integer i float i konwertujemy obie wartości na łańcuchy. Na koniec wyświetlamy przeliczone wartości.
Należy zauważyć, że konwersja wartości zmiennoprzecinkowej na łańcuch może dać nieoczekiwane wyniki, ponieważ liczba cyfr znaczących może wynosić zero w metodzie to_string.
Korzystanie z klasy stringstream
Używając klasy stringstream, stringstream najpierw deklaruje obiekt stream, który wstawia wartość liczbową jako strumień do obiektu. Następnie używa funkcji „str ()” do wewnętrznej konwersji wartości liczbowej na łańcuch.
Przykład:
#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; }
Wynik:
Ciąg utworzony z liczby całkowitej to: 26082019
Ciąg utworzony z podwójnego to: 3.142
W tym zestawieniu zdefiniowaliśmy liczbę całkowitą i podwójną. Następnie mamy obiekt ostringstream, za pomocą którego zamieniamy wartość liczbową na obiekt stringstream. To jest używanie „<<’ operator. Next, we use the str() method on a stringstream object to convert it to a string.
Wniosek
W tym samouczku omówiliśmy funkcje konwersji, które konwertują ciąg na typy liczbowe i typy liczbowe z powrotem na ciąg. Widzieliśmy szczegółowo funkcje i przykłady funkcji stoi (), stod (), atoi (), to_string (). Omówiliśmy również niektóre funkcje i metody klas stringstream, które pomagają nam wykonać wspomniane konwersje.
Zalecana literatura = >> Konwertuj ciąg na liczbę całkowitą w Javie i Metody konwersji Int na String w Javie
W następnym samouczku nauczymy się funkcji konwersji dla typów danych znakowych.
=> Zobacz szczegółowe samouczki szkoleniowe C ++ tutaj.
rekomendowane lektury
- Funkcje łańcuchowe w Pythonie
- Funkcje konwersji znaków C ++: char na int, char na string
- Ciąg Java z buforem ciągów i samouczek dotyczący tworzenia ciągów
- Funkcje łańcuchowe w C ++: getline, podciąg, długość ciągu i więcej
- C # Konwertuj ciąg na Int przy użyciu metod Parse, Convert i TryParse
- Funkcje ciągów VBScript: funkcje VBScript inStr, Replace, Mid i Trim
- Samouczek dotyczący dzielenia ciągów w Pythonie
- C # String Tutorial - Metody ciągów z przykładami kodu