从 std::string 解析整数,但如果是浮点则失败

2024-04-04

在 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(使用前将#替换为@)

从 std::string 解析整数,但如果是浮点则失败 的相关文章

随机推荐

  • xslt需要选择单引号

    我需要这样做
  • YouTube API 配额限制和可扩展的应用程序

    我目前正在开发一个需要通过 youtube 上传视频的应用程序 我计划通过 youtube API 在应用程序中分享视频 根据文档 在 YouTube 上分享视频需要 大约 16000 个单位 每个应用程序都有 500 万个单位的补充配额
  • C++ VS2013 调试器断点:未命中

    我有一个相对简单的 C 控制台项目 它执行一些计算并写入输出文件 我试图确定为什么输出文件没有正确的输出 相反 我一直在与调试器作斗争 由于某种原因我无法添加断点在某个函数的某一行之后 无法到达第 1106 行之后到第 1214 行 函数末
  • 获取模拟用户名

    我有一个类需要知道当前有效的用户名 Environment UserName or WindowsIdentity GetCurrent Name是为了那个 但是当启用模拟时 它们会返回LocalUser名称不是ImpersonatedUs
  • 如何使用 SQL 查询删除 PostgreSQL 中的所有模式?

    我需要删除数据库中的所有架构 除了public information schema以及那些LIKE pg 这是我发现的 这个变体似乎不起作用 CREATE OR REPLACE FUNCTION drop all RETURNS VOID
  • Snow Leopard 上的 PyObjc 和 Cocoa

    我即将开始我的 A 级计算项目 高中级别 该项目有望成为 Mac 操作系统的销售点应用程序 不幸的是 目前 Objective C 有点超出我的能力范围 如果我在项目中陷入困境 我没有人可以提供帮助 所以我可能会不及格这门课程 也无法进入大
  • 如何测试载波文件是否更改?

    我正在尝试测试代码中的图像是否随载波更改 但我找不到方法来执行此操作 即使文件无效 对象似乎也被标记为已更改 因此它并未真正更改 查看以下输出 rdb 1 job translated xliff
  • Java:计算两点之间的角度(以度为单位)

    我需要计算我自己的 Point 类的两点之间的角度 以度为单位 点 a 应为中心点 Method public float getAngle Point target return float Math toDegrees Math ata
  • Django REST Framework 自定义字段验证

    我正在尝试为模型创建自定义验证 以检查其start date在其之前end date事实证明这几乎是不可能的 我尝试过的东西 内置 Django 验证器 没有对此进行检查 我自己写的 就像这样 def validate date self
  • 更新 flutter 和 Xcode 后,Xcode 14.3 中缺少文件“libarclite_iphoneos.a”

    我有 flutter 项目 我正在尝试运行 iOS 版本 但在将 flutter 和 Xcode 更新到最新版本后出现错误 我使用 firebase core 插件 error Could not build the precompiled
  • 爱国者导弹浮动指向误差

    从计算机系统 程序员的角度http csapp cs cmu edu http csapp cs cmu edu 练习题2 51 我们在问题 2 46 中看到 爱国者导弹软件近似为 0 1 因为 x 0 000110011001100110
  • Azure 相同的 FTP URL 适用于共享相同应用程序服务计划的所有 Azure 网站

    我为单一应用程序服务计划创建了几个 Web 应用程序 对于所有这些应用程序 我看到一个 FTP URL 问题是 当我转到 URL 时 我可以看到一个 Site wwwroot 文件夹 其中仅显示一个应用程序 不是可以访问其他Web应用程序的
  • 在 Python 或 MATLAB 中从等值线图的像素中提取数据

    我有一个这样的等高线图 Now 如果我没有生成等值线图的数据 而我拥有的只是图像 如何从图像中提取每个像素的值并将其存储在数组中 MATLAB Python 中的任何建议或示例都会有帮助 如果您知道像素值 请使用find 您可以找到您想要的
  • 文本修饰:外观和计算值之间的明显差异

    我在处理与以下内容相关的代码时注意到了这一点 奇怪 a div 周围的链接 div 内的样式 https stackoverflow com questions 13595357 alink around div styling insid
  • EC2 Ubuntu 14 默认密码

    我有一个EC2实例运行Ubuntu 14我经常使用它连接SSH 现在我尝试使用 Windows 中的远程桌面连接到此实例 如图所示here https askubuntu com questions 592537 can i access
  • ggplot2交错轴标签

    我正在制作一个ggplot x 轴是因子 标签很长 我无法缩短标签 它们已经尽可能短了 我有兴趣使标签垂直偏移 我的偏好是让每个奇数标签的高度为 0 每个偶数标签的高度距离 x 轴更远 2 个单位 我看过这里 ggplot 希望帮助 htt
  • Rails 4.0 安装错误 -require: 无法加载此类文件 -- active_support (LoadError)

    我安装了新的 Ruby 2 0 和 Rails 4 0 当我执行 Rails new test app 时 我得到以下信息 有人遇到这个吗 devuser devbox rails 新 test app usr local lib ruby
  • 将二进制字符串转换为字节

    我有一个由 0 255 字节值组成的字符串 我需要将其转换为字节数组 我不想将范围 128 255 转换为 utf 8 事实上 该字符串已经以 utf 8 编码 我到底该如何解决令人沮丧的 不在 0 128 范围内 错误 gt gt gt
  • 如何在 Swift 中生成随机 unicode 字符?

    我当前尝试创建随机 unicode 字符生成失败 并出现错误 例如我的其他问题中提到的错误here https stackoverflow com questions 32158381 fatal error high and low su
  • 从 std::string 解析整数,但如果是浮点则失败

    在 C 和 C 中 有多种方法可以将字符串转换为整数 但我还没有找到解析浮点数时失败的转换方法 const float fnum std stof 1 5 std cout lt lt fnum lt lt std endl prints