You need to enable JavaScript to run this app. C++ 如何以特定字符串'11'为分隔符分割字符串并修复多余空格问题
优惠活动
大模型
产品
解决方案
定价
更多

C++ 如何以特定字符串'11'为分隔符分割字符串并修复多余空格问题

核心问题定位

你遇到的异常输出是代码逻辑存在三个明确的硬伤导致的:

  • 逻辑适配错误:你当前需求是用长度为2的字符串"11"作为分割边界,但是传参设计用的是单字符char dl的分隔逻辑,从参数设计层就和实际需求不匹配
  • 遍历过程中随意修改原字符串内容:检测到连续两个'1'匹配后,你把对应位置的字符赋值为0(也就是空终止符\0),但循环没有跳过这两个已经被修改的位置,后续遍历走到该位置时,会把这个空字符直接拼接到当前累积的子串中,最终vector里存的内容是带空字符的,输出时就表现为看起来像多余的空格
  • 入栈判断逻辑恒成立:你写的判断条件if (word != "1" || word != "0" )在逻辑上永远为真——任意字符串不可能同时等于"1"和"0",这个判断根本起不到过滤无效内容的作用
修复后的实现思路

不需要用单字符当分隔符参数,直接按规则匹配"连续两个1"作为分割边界:每检测到一处连续的"11",就把从上一次分割结束位置到当前"11"末尾的整段作为一个子串存入数组,全程不修改原字符串的字符内容,匹配后直接跳过已处理位置的重叠判断,自然不会出现多余的空字符,也不会错误切分重叠的字符段。

可直接运行的修复代码
#include <vector>
#include <iostream>
#include <string>
using namespace std;

vector<string> splitStrings(const string& str) {
    vector<string> substr_list;
    int str_len = str.size();
    int segment_start = 0;
    int i = 0;

    // 从左到右遍历字符串,匹配连续的"11"分割边界
    while (i < str_len - 1) {
        if (str[i] == '1' && str[i+1] == '1') {
            // 切出从当前段起始位置到边界末尾的整段子串
            substr_list.push_back(str.substr(segment_start, i + 1 - segment_start + 1));
            // 更新下一段的起始位置,跳过已处理的两个1
            segment_start = i + 2;
            // 直接把遍历指针移到下一段的起始位置,避免重复匹配重叠的1
            i = segment_start;
        } else {
            i++;
        }
    }
    return substr_list;
}

int main(){
    string str1 = "1110110011";
    vector<string> result = splitStrings(str1);
    for (const string& s : result) {
        cout << s;
    }
    return 0;
}

运行后拼接输出的内容会和原字符串"1110110011"完全一致,分割得到的数组元素正好是["11", "1011", "0011"],没有多余的空字符或空格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 07:27:03