我有这段代码:

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为底的字母传递),则它实际上应该引发异常。

对于double,您可以大致相同的方式实现stod,但改用strtod

关于c++ - istringstream无效错误初学者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15770851/

10-12 18:20