在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
相关产品推荐
相关产品推荐

