【发布时间】:2020-09-02 19:03:15
【问题描述】:
C++20 添加了starts_with,ends_with 到 std::string。
有没有一个很好的方法让它区分大小写in?
请注意,性能很重要,因此我不想将两个字符串(或其中的 std::min(len1, len2) 部分)都小写/大写。
与常规的 <algorithm> 算法不同,starts_with 没有比较器过载,所以我看不出有什么好的方法。
而且我有点理解 90% 以上的情况是区分大小写的,除非非常有用,否则 C++ 中的成员 fns 会被避免......所以我知道为什么会存在这个限制,我只是好奇是否可以使用相对可读的东西在 C++20 中一起破解,而我没有使用自定义比较器手动调用 std::equal(或范围版本的 equal)。
【问题讨论】:
-
Does this answer your question? 仅将它用于这两个功能需要一些额外的查看/复制代码,但为了避免复制,请注意它也适用于
string_view。但是,无论如何,更严格的性能要求可能会更好地使用 SIMD 实现,具体取决于编译器+标准库的优化程度。 -
@chris 不是真的,我不想要不区分大小写的字符串类,我想要 std::string 的不区分大小写比较
-
如果您不关心大小写,为什么不将所有字符串存储在一个大小写中?
-
@NoSenseEtAl,我的意思是您可以在区分大小写的字符串上创建不区分大小写的视图。
-
@NathanOliver:这可能是不必要的复杂化是有原因的,例如用户可能将他的文件命名为 MyLog.log 并且他希望看到它在 UI 中显示为 MyLog.log,即使我们在内部只需检查文件是否不区分大小写以 .log 结尾(因为这是我们允许的)。
标签: c++ c++20 stdstring stl-algorithm std-ranges