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

在C语言中如何从char*类型字符串中逐位删除字符并定义新变量

实现思路

  • 首先明确C语言中char*指向的字符串如果是字面量(比如直接写char *str = "apple"),存储在只读内存区,不能直接修改,我们采用拷贝到新空间时跳过待删除字符的方式实现,不会改动原字符串。
  • 待删除位置如果是你说的「第n个字符」,对应索引为n-1(C语言字符串默认从0开始计数)。
  • 新字符串长度为原字符串长度减1,申请空间后要手动补字符串结束符\0,否则会出现输出乱码。

可运行示例代码

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

int main() {
    // 原字符串
    char *original_str = "apple";
    int origin_len = strlen(original_str);

    // 循环删除第1到最后一个字符,生成新字符串
    for (int del_idx = 0; del_idx < origin_len; del_idx++) {
        // 申请新字符串空间:长度为原长度-1 + 1位结束符,刚好等于origin_len
        char *new_str = (char*)malloc(sizeof(char) * origin_len);
        int new_pos = 0;

        // 拷贝时跳过待删除位置的字符
        for (int i = 0; i < origin_len; i++) {
            if (i != del_idx) {
                new_str[new_pos++] = original_str[i];
            }
        }
        // 必须补字符串结束符
        new_str[new_pos] = '\0';

        printf("删除第%d个字符的结果:%s\n", del_idx + 1, new_str);
        // 释放动态申请的内存,避免泄漏
        free(new_str);
    }

    return 0;
}

运行输出

删除第1个字符的结果:pple
删除第2个字符的结果:aple
删除第3个字符的结果:aple
删除第4个字符的结果:appe
删除第5个字符的结果:appl

注意事项

  • 如果你不想用动态内存申请,也可以直接定义栈数组存储新字符串,比如char new_str[1024];,只要数组长度大于你要处理的字符串长度即可,不需要手动free。
  • 如果你需要单独存储每个生成的新字符串,把循环里的逻辑单独抽出来写即可,不需要循环迭代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:06:04