У меня есть этот кусок кода:
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) ;
}
Если вам действительно не нужно поступать иначе, рассмотрите возможность использования чего-то вроде:
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
вместо.
Прежде всего, istringstream
не оператор. Это класс входного потока для работы со строками.
Вы можете сделать что-то вроде следующего:
istringstream temp(value);
temp>> value;
cout << "value = " << value;
Вы можете найти простой пример использования istringstream здесь: http://www.cplusplus.com/reference/sstream/istringstream/istringstream/