Aktualizacja dla C ++ 11
Począwszy od C++11
standardowego, konwersji i string-to-liczby odwrotnie są wbudowane w bibliotece standardowej. Wszystkie poniższe funkcje są dostępne w <string>
(zgodnie z paragrafem 21.5).
ciąg na numeryczny
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Każdy z nich przyjmuje ciąg znaków jako dane wejściowe i próbuje przekształcić go w liczbę. Jeśli nie można skonstruować prawidłowej liczby, na przykład ponieważ nie ma danych liczbowych lub liczba jest poza zakresem dla typu, zgłaszany jest wyjątek ( std::invalid_argument
lub std::out_of_range
).
Jeśli konwersja zakończyła się powodzeniem i idx
nie 0
, idx
będzie zawierać indeks pierwszego znaku, który nie został użyty do dekodowania. Może to być indeks znajdujący się za ostatnim znakiem.
Wreszcie typy całkowite pozwalają określić podstawę, dla cyfr większych niż 9 zakłada się alfabet ( a=10
do z=35
). Więcej informacji na temat dokładnego formatowania, które można przeanalizować tutaj dla liczb zmiennoprzecinkowych , liczb całkowitych ze znakiem i liczb całkowitych bez znaku .
Wreszcie, dla każdej funkcji istnieje również przeciążenie, które akceptuje std::wstring
jako pierwszy parametr.
numeryczne na ciąg
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Są prostsze, przekazujesz odpowiedni typ liczbowy i otrzymujesz ciąg znaków z powrotem. W przypadku opcji formatowania należy wrócić do opcji stringsream C ++ 03 i użyć manipulatorów strumienia, jak wyjaśniono w innej odpowiedzi tutaj.
Jak zauważono w komentarzach, funkcje te powracają do domyślnej precyzji mantysy, która prawdopodobnie nie jest maksymalną dokładnością. Jeśli aplikacja wymaga większej precyzji, najlepiej wrócić do innych procedur formatowania ciągów.
Istnieją również zdefiniowane podobne funkcje o nazwach to_wstring
, które zwrócą plik std::wstring
.