c语言实现字符串过滤,C语言实现字符串的处理

1.  替换或删除字符串中的子字符串

字符串的删除很简单,用后面的数据替代前面的数据就实现了;但是,替换字符串缺比较复杂。我们需要通过指针实现字符串的查找,最后插入新的字符串。

函数参数说明:

string - 原始字符串;

substr - 子字符串,既需要被替换或者删除的字符串;

replacement - 替换的字符串,即用于代替子字符串的,如果此值为空,则直接删除子字符串。

/**************************************************************************************

* FunctionName : strReplace()

* Description : 字符串替换

* EntryParameter : None

* ReturnValue : None

**************************************************************************************/

char *strReplace(const char *string, const char *substr, const char *replacement)

{

char *tok = NULL;

char *newstr = NULL;

char *oldstr = NULL;

/* if either substr is NULL, duplicate string a let caller handle it */

if (substr == NULL)

{

return strdup(string); //

}

newstr = strdup(string);

while ((tok = strstr(newstr, substr)))

{

oldstr = newstr;

newstr = malloc(strlen(oldstr) - strlen(substr) + strlen(replacement) + 1);

/*failed to alloc mem, free old string and return NULL */

if (newstr == NULL)

{

free(oldstr);

return NULL;

}

memcpy(newstr, oldstr, tok - oldstr);

memcpy(newstr + (tok - oldstr), replacement, strlen(replacement));

memcpy(newstr + (tok - oldstr) + strlen(replacement), tok + strlen(substr), strlen(oldstr) - strlen(substr) - (tok - oldstr));

memset(newstr + strlen(oldstr) - strlen(substr) + strlen(replacement) , 0, 1);

free(oldstr);

}

return newstr;

}使用实例:

char *pnt;

pnt = strReplace(tmpBuf, tmpDat, tmpNew); // 字符串替换

memset(tmpBuf, ' ', sizeof(tmpBuf));

memcpy(tmpBuf, pnt, strlen(pnt));

free(pnt); // 必须调用指针释放,因为替换函数中调用了内存分配

你可能感兴趣的:(c语言实现字符串过滤)