Обновление для 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);
Это более просто: вы передаете соответствующий числовой тип и получаете обратно строку. Для параметров форматирования вам следует вернуться к параметру stringsream C ++ 03 и использовать манипуляторы потоков, как описано в другом ответе здесь.
Как отмечено в комментариях, эти функции возвращаются к точности мантиссы по умолчанию, которая, вероятно, не является максимальной точностью. Если для вашего приложения требуется более высокая точность, также лучше вернуться к другим процедурам форматирования строк.
Также определены похожие функции с именами to_wstring
, они возвращают std::wstring
.