gpt4 book ai didi

c++ - (String) 基于迭代器的转换为 int

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:33 25 4
gpt4 key购买 nike

我知道有 atoxstrtoxstox 系列,但我似乎找不到任何基于迭代器的字符串到标准库或 Boost 中的 int 转换。

我需要它们的原因是因为我有一个解析器,其匹配结果是一个引用输入字符串的范围。我很可能有一个像

这样的输入字符串
...8973893488349798923475...
^begin ^end

所以我需要 738934883 作为一个整数。

当然,我可以先使用 beginend 构造一个 std::string 以与上述任何一个系列一起使用,但是我非常想避免这种开销。

所以我的问题是:标准库或 Boost 中是否有任何东西接受迭代器作为输入,还是我必须自己编写。

最佳答案

Boost 实际上支持这个,使用 Lexical Cast图书馆。以下代码使用子字符串范围来解析数字而不执行任何动态分配:

#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>

int convert_strings_part(const std::string& s, std::size_t pos, std::size_t n)
{
return boost::lexical_cast<int>(s.data() + pos, n);
}

int main(int argc, char* argv[])
{
std::string s = "8973893488349798923475";

// Expect: 738934883

std::cout << convert_strings_part(s, 2, 9) << std::endl;

return 0;
}

输出(在带有 Boost 1.60 的 OS X 上测试):

738934883

词法转换库有一些用于字符串转换的强大功能,尽管由于某些原因它不像其他一些那样广为人知。

关于c++ - (String) 基于迭代器的转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com