2017-03-13 88 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