首页 > 后端开发 > C++ > 如何在 C 中将字符串转换为整数并处理转换错误?

如何在 C 中将字符串转换为整数并处理转换错误?

Barbara Streisand
发布: 2024-11-04 22:49:02
原创
1022 人浏览过

How Can I Convert Strings to Integers in C   While Handling Conversion Errors?

在 C 中使用布尔失败将字符串转换为整数

问题:

在 C 中将字符串转换为整数通常会出现以下情况处理无效转换的问题。这就需要一种有效的方法来执行此类转换,并能够指示失败。

解决方案:Boost 的 Lexical Cast

Boost 的 lexical_cast 库提供了一个强大的解决方案安全的字符串到整数的转换。遇到无效转换时会抛出异常:

<code class="cpp">#include <boost/lexical_cast.hpp>

try {
    int i = boost::lexical_cast<int>(s);
    // Success handling
} catch(...) {
    // Failure handling
}</code>
登录后复制

没有 Boost 的替代方案:标准流和异常

如果 Boost 不可用,您可以使用标准输入/有例外的输出流操作:

<code class="cpp">#include <iostream>
#include <sstream>
#include <string>

try {
    std::stringstream ss(s);
    int i;
    if ((ss >> i).fail() || !(ss >> std::ws).eof())
        throw std::bad_cast();
    // Success handling
} catch(...) {
    // Failure handling
}</code>
登录后复制

伪造 Boost 的 Lexical Cast(可选)

您可以在不使用 Boost 的情况下创建 lexical_cast 的自定义版本:

<code class="cpp">template <typename T>
T lexical_cast(const std::string& s) {
    std::stringstream ss(s);
    T result;
    if ((ss >> result).fail() || !(ss >> std::ws).eof())
        throw std::bad_cast();
    return result;
}</code>
登录后复制

无抛出版本(可选)

对于无抛出版本,处理 lexical_cast 函数中的异常:

<code class="cpp">template <typename T>
bool lexical_cast(const std::string& s, T& t) {
    try {
        t = lexical_cast<T>(s);
        return true;
    } catch (const std::bad_cast& e) {
        return false;
    }
}</code>
登录后复制

以上是如何在 C 中将字符串转换为整数并处理转换错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板