使用Stringstream将String转换为Int

时间:2011-08-04 09:47:49

标签: c++ string casting int transformation

这里有一点问题:

int IntegerTransformer::transformFrom(std::string string){
    stream->clear();
    std::cout<<string<<std::endl;;
    (*stream)<<string;
    int i;
    (*stream)>>i;
    std::cout<<i<<std::endl;
    return i;
}

我通过使用字符串“67”调用此函数(其他值也不起作用)我得到此输出:

67
6767

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

  

&于流GT;清除();

“清空”字符串流的内容。它会重置从流中读取失败时设置的错误标志(例如,因为文本的格式不正确,无法读取整数)。

解决这个问题的最简单方法是创建一个新的本地范围的字符串流:

int IntegerTransformer::transformFrom(std::string string){
    std::stringstream parser(string);
    int i;
    parser>>i;
    return i;
}

注意你也不再需要乱用指针(我假设,动态分配),你可以使用构造函数来设置初始值。

将流作为类的数据成员通常是一个坏主意。它们真的不适合这种用途。

下一个最简单的解决方案是使用实际用于作业的成员函数.str(),如Nawaz所示。

正如Nawaz所提到的,无论如何,废弃整个事情而只是使用boost::lexical_cast可能是一个更好的主意。不要重新发明轮子。