【发布时间】:2017-03-13 12:34:27
【问题描述】:
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::istringstream iss;
iss.str("1.23@45");
double result;
iss >> result;
std::cout << result << std::endl;
if (!iss.eof() || iss.fail()) {
std::cout << "error occurred" << std::endl;
}
}
输出是
1.23
error occurred
是否有更好的解决方案来检查所有字符是否已被处理?
更新
另外,我想知道是否有任何方法可以检测 超出范围 错误。
【问题讨论】:
-
你可能对
boost::lexical_cast感兴趣。 -
@Angew,我需要依赖于区域设置的转换,而不需要全局设置区域设置,因此我选择基于流的解决方案。
-
如果有尾随空格是合法的,您可能想要使用
iss >> result >> std::ws;。否则,我认为这是最好的。
标签: c++ error-handling casting stringstream istringstream