作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 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
差很多。我将使用 stoi
或 UncheckedStrToInt
,具体取决于 wstring_view
是否已经过验证。
关于c++ - 将 wstring_view 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67283876/
我正在尝试将 wstring_view 转换为 int。是否有类似 stoi 的东西适用于 wstring_view 而不是 string?不能使用任何 C-api,因为它不一定以 null 结尾。不
我有 std::unordered_map> map; 当我尝试 map.find("asdf"sv) 我明白了 error C2664: 'std::_List_const_iterator>> s
我是一名优秀的程序员,十分优秀!