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

如何在C语言char数组中每3位插入分隔符并返回char指针

功能实现方案

实现逻辑

  • 先计算输入数字字符串的长度,长度≤3时不需要插入分隔符,直接返回拷贝结果即可
  • 计算需要插入的分隔符总数:分隔符个数 = (原字符串长度 - 1) / 3,例如示例中8位长度对应(8-1)/3=2个逗号
  • 动态申请结果字符串的内存,内存大小为原长度 + 分隔符个数 + 1,额外1个字节存储字符串结束符\0
  • 从后往前遍历原字符串和结果数组,每复制3位数字就插入1个逗号,避免在字符串开头额外多加分隔符

完整代码实现

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

char* insert_divider(char* number) {
    int origin_len = strlen(number);
    // 长度小于等于3无需加分隔符,直接返回拷贝
    if (origin_len <= 3) {
        char* res = (char*)malloc(origin_len + 1);
        strcpy(res, number);
        return res;
    }
    int comma_cnt = (origin_len - 1) / 3;
    int res_len = origin_len + comma_cnt;
    char* res = (char*)malloc(res_len + 1);
    res[res_len] = '\0'; // 提前写入字符串结束符
    
    int origin_idx = origin_len - 1; // 原字符串末尾下标
    int res_idx = res_len - 1; // 结果字符串末尾下标
    int step = 0;
    while (origin_idx >= 0) {
        res[res_idx--] = number[origin_idx--];
        step++;
        // 每3位插入1个逗号,避免在字符串开头插入
        if (step == 3 && origin_idx >= 0) {
            res[res_idx--] = ',';
            step = 0;
        }
    }
    return res;
}

// 测试用例
int main() {
    char number[] = "12000000";
    char* result = insert_divider(number);
    printf("%s\n", result); // 输出 12,000,000
    free(result); // 动态申请的内存使用完后需要释放,避免内存泄漏
    return 0;
}

指针操作说明

你如果习惯纯指针操作而非下标写法,核心遍历逻辑可以替换为下面的写法,和下标操作是完全等价的:

char* origin_p = number + origin_len - 1;
char* res_p = res + res_len - 1;
int step = 0;
while (origin_p >= number) {
    *res_p-- = *origin_p--;
    step++;
    if (step == 3 && origin_p >= number) {
        *res_p-- = ',';
        step = 0;
    }
}

注意事项

  • 不要直接修改传入的原数组,原数组的存储空间只够存原始数字,没有多余空间存储插入的逗号
  • 函数返回的指针指向动态申请的堆内存,调用方使用完后需要调用free()释放,否则会出现内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:06