由浅入深C系列六:C中实现字符串trim的功能

C中实现字符串trim的功能

  • 简介
  • 设计思路
  • 代码实现
  • 测试代码
  • 运行效果

简介

在一个项目的开发过程中,需要用C语言实现对字符串中的指定字符进行过滤并从原字符串中删除。相当于Java中String.replace()的功能。经查询C语言的基本库,没有找到类似功能的库函数,于是,发挥程序员的主观能动性和自力更生的能力,也就啥都有了。:)

设计思路

主要利用指针来对原字符串进行遍历,遇到对应的字符后,则跳过复制到新串的动作;未匹配的字符则正常进行复制到新串的动作。

代码实现

char* strtrim(char *src, char c) 
{
    char* output = (char*)malloc(strlen(src)*sizeof(char));
    memset(output, 0, strlen(src));

    char* in = src;
    char* ot = output;
    
    while(*in) 
    {
        if (*in == c)
        {
            *in++;
            continue;
        }
        else
        {
            *ot = *in;
            *ot++;
            *in++;
        }
    }
    // 这里提示一个小知识点,也是重要的知识点,对于malloc/realloc申请的内存,是放在heap里的,所以,使用完之后,要记得free(),避免内存泄漏。memoey leak就不好玩了。。。
    return output;
}

测试代码

char* p ="\"code\":\"xdfiesdf9iersdfk;asdfjnm\"";
X_LOG_DEBUG("Refore %s", p);
X_LOG_DEBUG("After %s", strtrim(p, '\"'));

X_LOG_DEBUG是一个宏定义,参考系列文档的上一篇。链接: 由浅入深C系列五

运行效果

[Aug 14 2023 00:41:20] [src/osmp.c.101] [main] [DEBUG] Refore "code":"xdfiesdf9iersdfk;asdfjnm"
[Aug 14 2023 00:41:20] [src/osmp.c.102] [main] [DEBUG] After code:xdfiesdf9iersdfk;asdfjnm

你可能感兴趣的:(C/C++,c语言,算法)