我有这段代码:
if(flag == 0)
{
// converting string value to integer
istringstream(temp) >> value ;
value = (int) value ; // value is a
}
我不确定我是否正在使用istringstream
运算符权限。我想将变量“value”转换为整数。
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 :(得分:3)
除非您确实需要这样做,否则请考虑使用以下内容:
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
。
答案 1 :(得分:0)
首先,istringstream
不是运营商。它是一个对字符串进行操作的输入流类。
您可以执行以下操作:
istringstream temp(value);
temp>> value;
cout << "value = " << value;
您可以在此处找到一个简单的istringstream用法示例:http://www.cplusplus.com/reference/sstream/istringstream/istringstream/