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

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

Patricia Arquette
Patricia Arquette原创
2024-11-04 20:21:01808浏览

How can I handle conversion errors when converting a string to an integer in C  ?

使用 C 中的错误处理将字符串转换为 int

将字符串转换为整数是编程中的常见任务。但是,在某些情况下,字符串值可能无法成功转换为整数。在这种情况下,优雅地处理转换失败至关重要。

boost::lexical_cast

将字符串转换为 int 时出现错误的最简单方法之一处理方法是使用 boost::lexical_cast 函数。如果转换无法继续,此函数会抛出异常,从而允许我们捕获它并做出适当的响应。

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

int main() {
  std::string s;
  std::cin >> s;

  try {
    int i = boost::lexical_cast<int>(s);
  } catch (...) {
    // Handle the conversion failure
  }
}</code>

使用标准库函数

另一种不使用的方法boost 是利用标准库函数,例如 std::stringstream 和std::bad_cast.

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

int main() {
  std::string s;
  std::cin >> s;

  std::stringstream ss(s);
  int i;

  if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
    throw std::bad_cast();
  }
}</code>

自定义函数

为了可定制性,您可以创建一个模拟 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>

非投掷版本

如果您希望避免抛出异常,您可以通过捕获异常并返回失败指示符来创建上述函数的无抛出版本。

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn