主要使用指针操作,熟练使用指针对字符串进行操作。
函数:int find_substr(const char *src, const char *sub_str);
功能:在src中寻找子字符串sub_str;
参数:src(被寻找的字符串), sub_str(寻找的子字符串)
返回值:如果子字符串存在于src字符串中,则返回子字符串在src中的起始位置,否则返回-1;
int find_substr(const char *src, const char *sub_str)
{
//参数检测
if (src == NULL || sub_str == NULL)
return -1;
const char *substr = NULL;
inst start_pos = 0;
while(*src != '\0'){
substr = sub_str;
//如果在src中找到一个字符与子字符串第一个字符相等的字符,进入循环比较下一个字符
if (*src == *substr){
//循环比较字符,直到substr到字符串结尾'\0',如果中间有字符不相等,则跳出循环继续寻找
while(*src && *substr && (*src == *substr)){
src++;
substr++;
start_pos++;
}
//判断比较结果是否达到结尾,如果没有达到结尾,则继续在src中寻找,否则返回起始位置。
if (*substr == '\0')
return start_pos - strlen(sub_str) + 1;
}
src++;
start_pos++;
}
return -1;
}
函数:删除字符串中的子字符串
原型:char *del_substr(char *str, char const *substr);
参数:str(原字符串),substr(需要删除的字符串)
返回值:如果删除成功返回删除后的字符串,否则返回NULL。
char *del_substr(char *str, const char *substr)
{
//参数检测
if (str == NULL || substr == NULL)
return NULL;
//找到子字符串的起始位置
int pos = find_substr((const char *)str, substr);
if (pos >= 0){
//src偏移到子字符串起始位置
char *src = str;
src += pos;
src--;
//将字符串中子字符串后的字符串移动到子字符串位置
for (const char *ch = substr; *ch != '\0'; ch++){
*src = *(src+strlen(substr));
src++;
}
//将剩余的字符串拼接到移动后的字符串并返回。
char *tmp = src + strlen(substr);
*src = '\0';
strcat(src, tmp);
return str;
}else{
return NULL;
}
}
如有问题,欢迎指正。