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

如何在C语言中编写类似JavaScript的split函数?

在C语言中实现类似JavaScript的split函数

你原代码存在几个关键问题,导致只能获取第一个元素:

  • 拼接单词时未给word添加字符串结束符\0,C语言要求字符串必须以\0结尾,否则strcpy会读取垃圾数据甚至触发错误
  • 循环结束后没有处理最后一个单词(因为最后没有分隔符空格)
  • 函数参数定义了分隔符s,但代码里硬写了' ',未使用传入的参数

修正后的代码如下:

#include <stdio.h>
#include <string.h>

typedef char str[100];

void split(str all, str target[], char s) {
    size_t n = strlen(all);
    int targetN = 0;
    str word;
    int iw = 0;
    
    for (int i = 0; i < n; i++) {
        if (all[i] == s) { 
            // 给当前单词添加结束符,确保是合法C字符串
            word[iw] = '\0';
            strcpy(target[targetN], word);
            // 重置单词索引
            iw = 0;
            targetN++;
        } else {
            word[iw] = all[i];
            iw++;
            // 防止word数组溢出,可添加边界判断
            if (iw >= 99) break;
        }
    }
    // 处理最后一个无分隔符结尾的单词
    if (iw > 0) {
        word[iw] = '\0';
        strcpy(target[targetN], word);
        targetN++;
    }

    for (int x = 0; x < targetN; x++) { 
        printf("\n %d %s", x, target[x]);
    }
}

// 测试示例
int main() {
    str input = "we have good days";
    str result[10]; // 假设最多分割为10个单词
    split(input, result, ' ');
    return 0;
}

关键修改说明:

  • 遇到分隔符时,先给word补\0再执行strcpy,保证操作的是合法字符串
  • 循环结束后检查iw是否大于0,处理最后一个未被分割的单词
  • 将硬编码的' '替换为参数s,让函数支持自定义分隔符
  • 添加了word数组的溢出防护,避免越界访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:12:36