C语言实现从字符串中删除指定字符

桃夭
桃夭
发布时间:2026-10-13 | 4人浏览过
原创

本文详解了在C语言中如何高效地从字符数组(字符串)中移除特定的字符。核心思路是采用原地修改策略,利用变量索引将保留字符覆盖至原位置,从而实现低内存开销的数据处理。

结果与目标

我们需要编写一段C语言程序,能够接收用户输入的任意长度字符串(假设不超过100字节)以及一个待删除的目标字符。程序应能扫描整个字符串,将其中所有等于目标字符的部分剔除,并保持原有剩余字符的相对顺序不变,最终输出处理后的新字符串。

准备条件

  • 基础C语言开发环境(GCC编译器)。
  • 理解C语言字符数组(char[])以空字符 '\0' 结尾的特性。
  • 掌握基本的输入函数:对于读取整行文本可使用 gets() 或更安全的 fgets();读取单个字符可使用 getchar()。

真实操作顺序

第1步:声明与初始化变量

目的:预留存储空间并建立用于遍历和写入的索引指针。 入口:程序逻辑开始处。 动作: 定义字符数组 str[100] 用于存储输入内容,定义 c 存放待删字符。 定义整型变量 j(读索引)和 k(写索引),并将它们均初始化为0。这两个变量将分别指向当前被检查的字符位置和下一个需要填入的有效字符位置。

第2步:获取用户输入

目的:接收原始字符串及要移除的特定字符。 入口:main函数体内。 动作: 使用 printf 提示用户,并通过 gets(str) (注:生产环境中建议使用 scanf("%s") 配合长度限制,或使用 fgets)读取一整行文本存入 str 数组。 继续提示用户,并使用 c=getchar(); 读取用户想要删除的那个单字符。

第3步:执行过滤与重建字符串

目的:在不开辟新内存的情况下完成字符筛选。 入口:for循环结构。 动作: 构建如下逻辑:

#include<stdio.h>

int main() 
{
  char str[100],c;
  int j,k;

  printf("please input a string:");
  gets(str);

  printf("\nEnter a character:");
  c=getchar();

  // 核心过滤逻辑
  for(j=k=0; str[j]!='\0'; j++) 
  {
    // 如果当前读取到的字符不等于要删除的字符
    if(str[j]!=c) 
    {
      // 则将其复制到“写入指针”k指向的位置
      str[k++]=str[j];
    }
  }
  
  // 循环结束后,在 k 位置手动补上字符串结束标志
  str[k]='\0';

  printf("\n%s",str);
}

参数说明:
j 负责从头到尾逐个扫描字符。
k 负责标记哪些字符被保留了。只有遇到不需要删除的字符时,才会触发 k++。若连续遇到重复的目标字符,k 不移动,从而实现了数据的紧凑排列。

第4步:验证与测试

目的:确认代码逻辑的正确性。
典型运行过程如下:

please input a string:wqeqwe
Enter a character:w
qeqePress any key to continue

在上述示例中,目标字符为 'w'。原本包含两个 'w' 的 "wqeqwe",在经过处理后变成了不包含 'w' 的 "qeqe",符合预期结果。

完成判断

当控制台打印输出结果未包含指定的目标字符,且其余字符排列顺序与原字符串一致时,即表示操作成功完成。

简要总结

以上就是C语言从字符串中删除特定字符的详细内容。该算法利用了两个索引变量的差分特性,是一种经典的in-place(原地)数据清洗技巧。更多关于字符串处理的实用技巧,请持续关注本站相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表