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

在C++中如何拆分文本中相邻的字母和数字字符?

C++ 字母数字混合串拆分实现

实现逻辑

你需要拆分的字符串规则是「连续大写字母块 + 连续数字块」循环拼接,核心逻辑如下:

  • 遍历字符串时实时判断当前字符类型(字母/数字)
  • 当字符类型发生切换时,将前一段同类型的连续字符作为独立块存储
  • 字母块统一转换为首字母大写、其余字符小写的格式,数字块保留原有内容
  • 每一组「字母块+数字块」按要求的格式拼接输出即可

完整可运行代码

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <utility>

int main() {
    // 示例输入,实际使用时可替换为文件读取逻辑
    std::string raw_str = "JACK1940383DAVID30284HAROLD68372TROY4392";
    std::vector<std::pair<std::string, std::string>> result;
    
    if (raw_str.empty()) {
        std::cout << "输入为空" << std::endl;
        return 0;
    }

    std::string current_block;
    bool is_current_alpha = isalpha(raw_str[0]);
    current_block += raw_str[0];

    for (size_t i = 1; i < raw_str.size(); ++i) {
        bool is_now_alpha = isalpha(raw_str[i]);
        if (is_now_alpha != is_current_alpha) {
            // 字符类型切换,处理前一个块
            if (is_current_alpha) {
                // 处理字母块:转换为首字母大写其余小写的格式
                std::string formatted_name;
                formatted_name += toupper(current_block[0]);
                for (size_t j = 1; j < current_block.size(); ++j) {
                    formatted_name += tolower(current_block[j]);
                }
                result.emplace_back(formatted_name, "");
            } else {
                // 处理数字块:直接存入对应组的第二个字段
                result.back().second = current_block;
            }
            // 重置当前块状态
            current_block.clear();
            is_current_alpha = is_now_alpha;
        }
        current_block += raw_str[i];
    }

    // 处理遍历结束后剩余的最后一个块
    if (!current_block.empty() && !is_current_alpha) {
        result.back().second = current_block;
    }

    // 按要求格式输出
    std::cout << "List: ";
    for (size_t i = 0; i < result.size(); ++i) {
        if (i != 0) {
            std::cout << ", ";
        }
        std::cout << result[i].first << " / " << result[i].second;
    }
    std::cout << std::endl;

    return 0;
}

代码说明

  • 运行示例输入的输出结果为List: Jack / 1940383, David / 30284, Harold / 68372, Troy / 4392,完全符合要求
  • 仅依赖C标准库,兼容C11及以上版本,无需额外安装依赖
  • 逐字符遍历的逻辑支持大文件处理,不需要一次性加载整个文件到内存
  • 可自行补充异常处理逻辑,应对输入格式不符合「字母+数字循环」的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:01