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

求助:如何用递归实现C++中的句子拆分(字符串分割)?

递归实现字符串拆分功能

先贴出你已经实现的循环版拆分代码(修正了C++中字符串长度的正确写法s.length()):

#include <string>
using namespace std;

string strings[10];
void split(string s){
    int curr=0,start=0,end=0,i=0;
    
    while(i<=s.length()){
        if(s[i]==' ' or i == s.length()){
            end = i;
            string sub;
            sub.append(s,start,end-start);
            strings[curr] = sub;
            start = end + 1;
            curr += 1 ; 
        }
        i++;
    }
}

针对你的需求,以下是递归版本的实现,逻辑和循环版保持一致,能处理输入前后空格、中间连续空格的情况:

#include <string>
using namespace std;

string strings[10];

// 递归辅助函数,处理当前子串并维护数组索引
void splitRecursive(const string& s, int curr) {
    size_t spacePos = s.find(' ');
    // 没有找到空格,处理最后一段子串
    if (spacePos == string::npos) {
        if (!s.empty()) {
            strings[curr] = s;
        }
        return;
    }
    // 提取第一个空格前的子串
    string sub = s.substr(0, spacePos);
    // 非空才存入数组(跳过开头空格产生的空串)
    if (!sub.empty()) {
        strings[curr] = sub;
        curr++;
    }
    // 跳过当前空格后的连续空格
    size_t nextStart = spacePos + 1;
    while (nextStart < s.size() && s[nextStart] == ' ') {
        nextStart++;
    }
    // 递归处理剩余子串
    splitRecursive(s.substr(nextStart), curr);
}

// 对外调用接口,初始化处理
void split(const string& s) {
    // 重置数组,避免之前的残留数据
    for (int i = 0; i < 10; i++) {
        strings[i].clear();
    }
    // 跳过输入开头的连续空格
    size_t start = 0;
    while (start < s.size() && s[start] == ' ') {
        start++;
    }
    splitRecursive(s.substr(start), 0);
}

实现说明

  1. 对外的split函数先处理输入开头的空格,避免递归时生成空串,同时重置结果数组确保数据干净。
  2. 递归辅助函数splitRecursive每次只处理当前子串的第一个分隔符:
    • 找到第一个空格后,提取前面的有效子串存入数组;
    • 跳过后续的连续空格,避免生成空元素;
    • 对剩余的子串重复上述过程,直到没有空格为止,处理最后一段子串。

测试输入" computer laptop screen desktop mouse "后,strings数组的前5个元素会依次是computer、laptop、screen、desktop、mouse,和循环版输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:06:31