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

C++实现17位指定字符串替换为单个字母及获取元素索引方案

问题分析
  • 替换逻辑错误:当前replace函数的实现是检测到输入包含对应特征串后,直接将原特征串拼入结果,没有执行替换为对应字母的操作,这是输出不符合预期的直接原因。
  • 匹配顺序错误:按Subs数组的顺序遍历查找匹配项,没有按照输入字符串从左到右的顺序处理,会导致输出顺序和输入不一致,同时数组中重复的特征串会被多次检测到,造成输出重复内容。
  • 未清空已处理片段:检测到匹配后没有移除已经处理过的输入内容,会导致重复匹配相同片段。
  • 递归调用main属于C++未定义行为,不建议使用该方式实现重复输入逻辑。
修复代码

你的所有特征串均为固定17位长度,可采用从左到右逐段匹配的逻辑实现替换,修改后的replace函数如下:

std::string replace(std::string rep) {
    int sub_count = sizeof(Subs)/sizeof(Subs[0]);
    std::string result;
    const int FEATURE_LEN = 17;
    int current_pos = 0;
    while (current_pos + FEATURE_LEN <= rep.size()) {
        // 截取当前位置17位特征串
        std::string current_feature = rep.substr(current_pos, FEATURE_LEN);
        // 查找对应索引
        for (int i = 0; i < sub_count; i++) {
            if (current_feature == Subs[i]) {
                // 拼接对应字母
                result += Alphabet[i];
                break;
            }
        }
        // 移动到下一个特征串起始位置
        current_pos += FEATURE_LEN;
    }
    return result;
}

如果后续特征串长度不固定,可以改用如下通用实现:

std::string replace(std::string rep) {
    int sub_count = sizeof(Subs)/sizeof(Subs[0]);
    std::string result;
    size_t current_pos = 0;
    while (current_pos < rep.size()) {
        bool found = false;
        for (int i = 0; i < sub_count; i++) {
            size_t sub_len = Subs[i].size();
            if (current_pos + sub_len > rep.size()) continue;
            if (rep.substr(current_pos, sub_len) == Subs[i]) {
                result += Alphabet[i];
                current_pos += sub_len;
                found = true;
                break;
            }
        }
        if (!found) {
            // 未匹配的字符可按需选择保留或丢弃
            current_pos++;
        }
    }
    return result;
}
注意事项
  • 请确认Subs数组和Alphabet数组的索引对应关系符合你的需求,当前你提供的完整代码中Alphabet[0]为空格,若要达到示例输入输出abc的效果,需要将对应三个特征串所在索引的Alphabet值调整为a、b、c。
  • 建议将递归调用main的逻辑改为循环输入,避免未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:12:03