c++ - 如何在一次字符串传递中擦除非字母字符并将字母字符小写?
问题描述
给定一个字符串:
std::string str{"This i_s A stRIng"};
是否可以将其转换为小写并一次性删除所有非字母字符?
预期结果:
this is a string
我知道您可以使用std::transform(..., ::tolower)
andstring.erase(remove_if())
组合进行两次传递,或者可以通过迭代每个字符手动完成,但是有没有一种方法可以组合std::transform
anderase
调用而不必多次运行字符串?
解决方案
C++20 范围允许以一次性方式组合算法。
std::string str{"This i_s A stRIng"};
std::string out;
auto is_alpha_or_space = [](unsigned char c){ return isalpha(c) || isspace(c); };
auto safe_tolower = [](unsigned char c){ return tolower(c); };
std::ranges::copy( str
| std::views::filter(is_alpha_or_space)
| std::views::transform(safe_tolower)
, std::back_inserter(out));
推荐阅读
- arrays - 使用数组时 Julia 中的边界错误
- arrays - Mongo 在对象数组中按 id 查找位置
- azure - 需要将自定义 vm 映像从一个订阅复制到另一个订阅
- python - 对容器化应用程序使用加密时管理解密密钥的正确方法
- c# - GoogleJsonWebSignature ValidateAsync JWT 无效
- javascript - 来自 googlesheet 的数组处理
- java - Selenium - 三个不同的欢迎屏幕
- hyperledger-fabric - 在单个链码中调用不同的合约
- javascript - 如何在 Asp.net 引导程序中进行多选?
- fortran - Doxygen 无法处理 Fortran 代码中的头文件