istringstream неверная ошибка новичка

У меня есть этот кусок кода:

if(flag == 0)
{
// converting string value to integer

istringstream(temp) >> value ;
value = (int) value ; // value is a
}

Я не уверен, что использую istringstream Оператор прав. Я хочу преобразовать переменную «значение» в целое число.

Compiler error : Invalid use of istringstream.

Как мне это исправить?

После попытки исправить с первым ответом. это показывает мне следующую ошибку:

stoi was not declared in this scope

Есть ли способ, которым мы можем работать мимо этого. Код, который я использую сейчас:

int i = 0 ;
while(temp[i] != '\0')
{
if(temp[i] == '.')
{
flag = 1;
double value = stod(temp);
}
i++ ;
}
if(flag == 0)
{
// converting string value to integer
int value = stoi(temp) ;
}

0

Решение

Если вам действительно не нужно поступать иначе, рассмотрите возможность использования чего-то вроде:

 int value = std::stoi(temp);

Если вы должны использовать stringstreamвы обычно хотите использовать его в lexical_cast функция:

 int value = lexical_cast<int>(temp);

Код для этого выглядит примерно так:

 template <class T, class U>
T lexical_cast(U const &input) {
std::istringstream buffer(input);
T result;
buffer >> result;
return result;
}

Что касается подражания stoi если у вас его нет, я бы использовал strtol в качестве отправной точки:

int stoi(const string &s, size_t *end = NULL, int base = 10) {
return static_cast<int>(strtol(s.c_str(), end, base);
}

Обратите внимание, что это довольно быстрая и грязная имитация, которая на самом деле не соответствует требованиям stoi правильно на всех. Например, он должен действительно генерировать исключение, если ввод вообще не может быть преобразован (например, передача букв в базе 10).

Для двойного вы можете реализовать stod примерно так же, но используя strtod вместо.

3

Другие решения

Прежде всего, istringstream не оператор. Это класс входного потока для работы со строками.

Вы можете сделать что-то вроде следующего:

   istringstream temp(value);
temp>> value;
cout << "value = " << value;

Вы можете найти простой пример использования istringstream здесь: http://www.cplusplus.com/reference/sstream/istringstream/istringstream/

0

По вопросам рекламы [email protected]