简介
在一个项目的开发过程中,需要用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