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); // 必须调用指针释放,因为替换函数中调用了内存分配