Как преобразовать строку в двойную, используя только <iostream>, <string>, <cstdlib>, <stdio.h> и <cassert>? - PullRequest
1 голос
/ 31 января 2012

Я новичок в C ++, и мой учитель дал мне учебную программу для написания (это просто для практики ... не домашнее задание, и ничего не стоит, так что не волнуйтесь), и что я должен сделать, это прочитать ввод из стандартного входного потока сравните его с некоторыми произвольными строками, а затем в проекте мне нужно преобразовать его в двойное число (таким образом, я не могу прочитать его как двойное число).

Пока что я могу прочитать его и сохранить как строку string input; cin >> input;, однако, я не знаю, как преобразовать его в двойное число. Проблема в том, что мне разрешено использовать только следующие библиотеки:

<iostream>, <string>, <cstdlib>, <stdio.h>, and <cassert>.

Я смотрел на atof в cstdlib, но он принимает только char *, а не строку. Есть предложения?

Ответы [ 4 ]

3 голосов
/ 01 февраля 2012

Simple:

#include <string>

std::string s = "0.5";
double d = std::stod(s);
2 голосов
/ 01 февраля 2012

Попробуйте это:

#include <sstream>

double a;
const std::string str = "1.0";
std::istringstream is(str);
is >> a;
2 голосов
/ 01 февраля 2012

Я смотрел на atof в cstdlib, но он принимает только char *, а не string.

Вызов c_str для строки дает вам char const * ее содержимое, которое будет передано в функции библиотеки C, так что вы можете сделать

 atof(s.c_str())  // where s is an std::string
0 голосов
/ 01 февраля 2012

Строковый класс C ++ использует символьный массив C в качестве хранилища низкого уровня.Вы можете получить этот массив символов обратно используя

http://www.cplusplus.com/reference/string/string/c_str/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...