gpt4 book ai didi

c++ - 将 wstring_view 转换为 int

转载 作者:行者123 更新时间:2023-12-04 17:19:00 25 4
gpt4 key购买 nike

我正在尝试将 wstring_view 转换为 int。是否有类似 stoi 的东西适用于 wstring_view 而不是 string?不能使用任何 C-api,因为它不一定以 null 结尾。不能使用 from_chars,因为它是 wchar_t。到目前为止,我一直在转换为 std::wstring,然后转换为 int(使用 stoi),这可能适合小字符串优化等等,但首先违背了使用 View 的观点。

最佳答案

这是我发现的有效方法:

#include <cwchar>
#include <optional>
#include <string_view>

std::optional<int> StrToInt(std::wstring_view const view) noexcept {
wchar_t format_str[13]; // % + 10digits + d + \0 = 13 characters
std::swprintf(format_str, std::size(format_str), L"%%%dd", (int)view.size());

int res;
if (std::swscanf(view.data(), format_str, &res) != 1) return std::nullopt;
return res;
}

由于我们在 format_str 中明确指定了大小,因此 View 不需要以 null 结尾。

如果我们已经验证该字符串只包含数字字符(没有符号字符,没有前导或尾随空格等)并且它不会溢出,我们可以使用更简单的未检查例程:

int UncheckedStrToInt(std::wstring_view const str) noexcept {
int res = 0;
for (auto ch : str)
res = res * 10 + (ch - '0');
return res;
}

我做了一些 benchmarks . swscanf 的性能比 stoi 差很多。我将使用 stoiUncheckedStrToInt,具体取决于 wstring_view 是否已经过验证。

enter image description here

关于c++ - 将 wstring_view 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67283876/

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