Оновлення для 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
). Ви можете знайти більше інформації про точне форматування, яке можна проаналізувати тут для чисел з плаваючою комою , підписаних цілих чисел та непідписаних цілих чисел .
Нарешті, для кожної функції також існує перевантаження, яка приймає a 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 і використовувати маніпулятори потоку, як пояснено в іншій відповіді тут.
Як зазначається в коментарях, ці функції повертаються до точності мантіси за замовчуванням, що, ймовірно, не є максимальною точністю. Якщо для вашої програми потрібна більша точність, також краще повернутися до інших процедур форматування рядків.
Також визначені подібні функції, які названі to_wstring
, вони повернуть a std::wstring
.