You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用range-v3库按谓词规则分割字符串(如车牌字符分组)?

使用range-v3按自定义谓词分割范围

range-v3库里确实有正好匹配你需求的工具——ranges::group_by 适配器,它能根据你指定的谓词,把输入范围里相邻且满足“同组条件”的元素归为子范围,完全支持isdigit、iseven这类判断逻辑。

针对车牌/字母数字分割的实现

  1. 先定义分组判断逻辑:判断两个相邻字符是否属于同一类别(同为数字或同为字母)
    #include <range/v3/all.hpp>
    #include <cctype>
    #include <string>
    
    auto same_char_category = [](char a, char b) {
        return std::isdigit(a) == std::isdigit(b);
    };
    
  2. 用group_by分组后,通过join_with给各组之间加空格,最后转成字符串:
    std::string split_alnum(const std::string& input) {
        return input | ranges::views::group_by(same_char_category)
                     | ranges::views::join_with(' ')
                     | ranges::to<std::string>();
    }
    
  3. 测试效果:
    • 输入 kz083y68 → 输出 kz 083 y 68
    • 输入 3486nv09 → 输出 3486 nv 09

扩展到其他谓词(比如iseven)

如果要按奇偶分割整数序列,只需要换个谓词就行:

auto same_parity = [](int a, int b) {
    return (a % 2) == (b % 2);
};

// 调用示例
std::vector<int> nums = {1,3,2,4,5};
auto result = nums | ranges::views::group_by(same_parity)
                   | ranges::views::transform([](auto r) { return ranges::to<std::string>(r); })
                   | ranges::views::join_with(' ')
                   | ranges::to<std::string>();
// 最终结果为 "13 24 5"

内容的提问来源于stack exchange,提问作者Daniil Rozanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:06:05