2017-03-13 64 views
0
#include <iostream> 
#include <string> 
#include <sstream> 

int main() { 
    std::istringstream iss; 
    iss.str("[email protected]"); 
    double result; 
    iss >> result; 
    std::cout << result << std::endl; 

    if (!iss.eof() || iss.fail()) { 
    std::cout << "error occurred" << std::endl; 
    } 
} 

输出为错误处理铸造用字符串流翻一番

1.23 
error occurred 

有没有更好的解决方案,以检查所有字都经过处理?

UPDATE

另外,我不知道是否有什么方法可以检测出错误范围。

+0

您可能对['boost :: lexical_cast']感兴趣(http://www.boost.org/doc/libs/1_63_0/doc/html/boost_lexical_cast/synopsis.html#boost_lexical_cast.synopsis.lexical_cast)。 – Angew

+0

@Angew,我需要依赖于语言环境的铸造而不需要设置全局语言环境,因此我选择了基于流的解决方案。 – triclosan

+0

你可能想要使用'iss >> result >> std :: ws;'如果它有leagal有尾随空格。否则,我认为这是一样好。 – Galik

回答

2
if (!iss.eof() || iss.fail()) 

由于字符串流还没有到达流的末尾。 eof()显然是错误的,并且此if()条件将评估为true。

结果正确:并非所有字符都已处理。

+0

是的,我已经用单元测试覆盖了解决方案,它的工作原理。但解决方案看起来很庞大,所以我想知道是否有更好的解决方案。 – triclosan