在 C++ 和 C 中,有多种方法可以将字符串转换为整数,但我还没有找到解析浮点数时失败的转换方法。
const float fnum = std::stof("1.5");
std::cout << fnum << std::endl; // prints "1.5", all okay
const int inum = std::stoi("1.5");
std::cout << inum << std::endl; // prints "1", but wrong!
我需要它来分析 CSV 文件的列类型。如果一列中的所有字段都是整数,则将该列存储为 std::vector,如果是浮点型,则存储为 std::vector,否则将其存储为字符串。
唯一看起来有希望的方法是:
std::string num = "1.5";
char *end = nullptr;
const long lnum = strtol(num.data(), &end, 10);
if (end != &*num.end()) {
std::cout << "Float? " << l << " / " << num << std::endl;
} else {
std::cout << "Integer! " << l << " / " << num << std::endl;
}
这可行,但相当难看。有没有 C++ 的方法来解决这个问题?
您可以使用 boost lexical_cast。如果转换失败,它会抛出异常
try
{
number = boost::lexical_cast<int>(your_string);
}
catch (const boost::bad_lexical_cast& exec)
{
// do something on fail
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)