C语言模拟PHP trim函数:原地清理字符串首尾空白

远山来客
远山来客
发布时间:2026-10-13| 2人浏览过
原创

本文将展示如何在 C 语言中实现一个等同于 PHP `trim()` 功能的函数,该函数能够原地清除字符串开头和结尾的空白字符。

功能目标与限制

本段代码旨在实现以下行为:

  • 清除范围:仅移除字符串开头的连续空白字符和结尾的连续空白字符。
  • 中间保留:字符串中间的空白字符(如多个空格)不会被压缩或删除。
  • 原地修改:直接在原内存地址上修改字符串,不分配新的内存空间,最后返回原指针。
  • 局限性:该实现主要基于 ASCII isspace(),可能无法完美识别所有 Unicode 全角空格或特殊空白符,具体取决于环境定义。

第1步:初始化指针与状态标记

我们需要三个指针和两个标记位来跟踪当前状态:

  • p1:遍历指针,从左到右扫描整个字符串。
  • p2:写入指针,指向下一个非空白字符应该放置的位置(即修剪后字符串的新尾部位置)。
  • p3:用于记录最后一个空白字符的位置,以便在循环结束后截断尾部。
  • flag:状态机标记,0表示初始/首部空白阶段,1表示首部结束但尚未遇到中间内容,2表示已处理内部字符。
/*
 * 清除字符串开始结尾处的空白
 * 修改原字符串
 * */
static char* trim(char*str){
  char* p1 = str,*p2 = NULL,*p3 = NULL;
  int flag = 0;
  while(*(p1) != '\0'){
    if(isspace(*p1)){
      // 如果是空白字符
      if(p3 == NULL) p3 = p2 == NULL?p1:p2;//标记结尾空白
      if(0 == flag) {//标记开头为空白
        flag = 1;
        p2 = p1;
      }else if(2 == flag){//中间空白
        *(p2++) = *p1;
      }
    }else {
      // 如果不是空白字符
      if(1 == flag || flag == 2){//开头空白结束标志
        *(p2++) = *p1;
        flag = 2;
      }else flag = -1;//开头无空白
      p3 = NULL;//清除结尾空白标记
    }
    p1++;
  }

第2步:循环逻辑详解

算法核心在于单次遍历中的状态转换:

  1. 头部空白处理:当 flag=0 且遇到空白时,记录位置并跳过写入(即不移动 p2 的有效数据区)。
  2. 内部字符处理:一旦遇到非空白字符,进入 flag=2 状态。此时遇到的任何空白字符都会被视为“中间空白”,并通过 *p2++ = *p1 将其复制过来,保持中间空格的完整性。
  3. 尾部标记更新:只要遇到非空白字符,就重置 p3,因为最新的非空白字符之后的空白才是真正的尾部空白。

第3步:尾部截断与返回

循环结束后,根据 p3(最后一个空白位置)或 p2(最后写入位置)添加字符串结束符 '\0'。

  //标记结尾
  if(p3 != NULL) *p3 = '\0';
  else if(p2 != NULL) *p2 = '\0';
  return str;
}

截断逻辑说明

  • 如果找到了尾部空白(p3不为空),直接将 *p3 设为结束符,这会切断后续的所有尾部空白。
  • 如果没有尾部空白(例如字符串全是空白或没有检测到典型的尾部空白模式),则使用 p2 进行截断,确保字符串正确闭合。

总结

这段代码展示了如何在 C 语言中高效地模拟脚本语言中的常用字符串处理函数。相比标准库的 strtok 或其他复杂实现,此方法简洁且完全原地操作,适用于资源受限或需要特定行为(保留中间空格)的场景。 以上就是C语言实现PHP trim标签的详细内容,更多关于C语言字符串处理技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。