Обновление для C ++ 11
Начиная со стандарта C++11
, преобразование строки в число и наоборот встроено в стандартную библиотеку. Все следующие функции присутствуют в <string>
(согласно параграфу 21.5).
строка в числовое значение
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);
Каждый из них принимает строку в качестве ввода и пытается преобразовать ее в число. Если действительное число не может быть построено, например, из-за отсутствия числовых данных или числа, выходящего за пределы допустимого для типа, генерируется исключение (std::invalid_argument
или std::out_of_range
).
Если преобразование выполнено успешно и idx
не равно 0
, idx
будет содержать индекс первого символа, который не использовался для декодирования. Это может быть индекс позади последнего символа.
Наконец, целочисленные типы позволяют указать базу, для цифр больше 9 предполагается алфавит (от a=10
до z=35
). Вы можете найти больше информации о точном форматировании, которое может быть проанализировано здесь для чисел с плавающей запятой , целых чисел со знаком и целых чисел без знака .
Наконец, для каждой функции есть также перегрузка, которая принимает std::wstring
в качестве первого параметра.
цифра в строку
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);
Это более просто: вы передаете соответствующий числовой тип и получаете строку назад. Для параметров форматирования вы должны вернуться к опции C ++ 03 stringsream и использовать потоковые манипуляторы, как объяснено в другом ответе здесь.
Как отмечено в комментариях, эти функции возвращаются к точности мантиссы по умолчанию, которая, вероятно, не является максимальной точностью. Если для вашего приложения требуется большая точность, лучше также вернуться к другим процедурам форматирования строк.
Существуют также аналогичные определенные функции с именем to_wstring
, которые будут возвращать std::wstring
.