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

如何在字符数组(语句)中添加字符?遇'i'生成'ibi'的代码实现求助

解决字符数组中替换'i'为'ibi'的问题

嘿,我明白你遇到的问题了——用C标准库的string.h函数确实没法直接搞定这种变长替换的需求,因为string.h里的函数大多是针对固定长度或者简单字符串操作的,没有现成的“替换单个字符为多字符”的函数。不过别担心,咱们可以手动实现这个逻辑,步骤其实很清晰:

核心思路

替换'i'为'ibi'时,每个'i'会让字符串长度增加2(从1个字符变成3个),所以不能直接在原字符数组上修改(会导致内存越界),得先计算出替换后的字符串总长度,再分配足够的内存,最后逐个字符处理复制。

完整代码实现

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

char* replace_i_with_ibi(const char* input) {
    if (input == NULL) {
        return NULL;
    }

    // 第一步:统计输入字符串中'i'的数量
    int count_i = 0;
    const char* ptr = input;
    while (*ptr != '\0') {
        if (*ptr == 'i') {
            count_i++;
        }
        ptr++;
    }

    // 计算替换后的字符串长度:原长度 + 2*count_i(每个i多占2个位置) + 1(结束符'\0')
    int original_len = strlen(input);
    int new_len = original_len + 2 * count_i + 1;

    // 分配内存,记得检查是否分配成功
    char* result = (char*)malloc(new_len);
    if (result == NULL) {
        perror("malloc failed");
        return NULL;
    }

    // 第二步:逐个字符处理,构建结果字符串
    char* res_ptr = result;
    ptr = input;
    while (*ptr != '\0') {
        if (*ptr == 'i') {
            // 写入'ibi'
            *res_ptr++ = 'i';
            *res_ptr++ = 'b';
            *res_ptr++ = 'i';
        } else {
            // 直接复制原字符
            *res_ptr++ = *ptr;
        }
        ptr++;
    }
    // 添加字符串结束符
    *res_ptr = '\0';

    return result;
}

int main() {
    const char* test_input = "pig";
    char* output = replace_i_with_ibi(test_input);
    if (output != NULL) {
        printf("原字符串: %s\n替换后: %s\n", test_input, output);
        // 记得释放内存,避免泄漏
        free(output);
    }
    return 0;
}

代码说明

  • 统计'i'的数量:这一步是关键,只有知道有多少个需要替换的字符,才能准确计算出需要分配的内存大小,避免内存不足或者浪费。
  • 内存分配:用malloc分配足够的空间,一定要检查分配是否成功(避免NULL指针)。
  • 字符处理循环:遍历原字符串,遇到'i'就连续写入三个字符'i'、'b'、'i',其他字符直接复制,最后别忘了加结束符'\0',否则字符串会乱码。
  • 内存释放:使用完返回的字符串后,一定要用free释放内存,避免内存泄漏。

你可能踩过的坑

  1. 直接修改原数组:原字符数组的长度是固定的,替换后字符串变长会导致越界,覆盖其他内存区域,引发undefined behavior。
  2. 忽略结束符:C语言的字符串必须以'\0'结尾,忘记添加的话,后续使用字符串函数(比如printf、strlen)会出错。
  3. 内存泄漏:分配的内存如果不释放,长期运行会导致内存占用越来越高。

运行上面的代码,输入"pig"就会输出"pibig",完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:57:27