您的位置:首页 > 编程语言 > C语言/C++

自己动手写字符串库函数 三(C语言实现)

2015-01-11 23:14 218 查看
//子串同母串比较 是否在母串中  第二种方法
char* my_FindStr(char*des,const char*sour)
{
char*des1 = des - 1;
char*sour1 = NULL;
int desLen = strlen(des);
int sourLen = strlen(sour);
if (des == NULL || sour == NULL)
return NULL;
while (des1++ <= des + desLen - (sourLen - 1))
{
int flag = 1;//假设事先可以匹配成功
for (sour1 = sour; *sour1 != '\0';)
{
if (*((des1)+(sour1 - sour)) != *sour1++)
{
flag = 0;
break;
}
}
if (flag == 1)
{
break;
}
}
return des1;
}
//删除的指定的字符串
void my_DelChar(string*des,const char ch)
{
if (IsEmpty(des) == 0 || ch == NULL)
return;
else
{
char* des2 = my_StrStr(des, ch);
char*des3 = des2;
if (des2 == NULL)  //没有找到指定的字符
return;
//将后面的向前移动
while (*des2 != '\0')
{
*des3++ = *++des2;
}
des->len -= 1;  //长度减一
}
}

/*
任意位置插入字符串
ch 插入的字符
pos 插入的位置 从0开始计算
*/
void my_InsertChar(string*des,const char ch, int pos)
{

char* des1;
if (IsEmpty(des) == 0 || ch == NULL)
return;
//对插入的位置进行判断
int desLen = my_StrLen(des->str) + 1;
if (desLen < pos || pos < 0)
{
//TODO:插入的位置不合理
return;
}
//重新分配空间
des->str = (char*)realloc(des->str, desLen + sizeof(char));
//长度+1
des->len += 1;

des1 = des->str;
for (char* des2 = des->str + des->len - 2; des2 >= des1 + pos;)
{
char*des3 = des2;
*des3-- = *--des2;
}

*(des1 + pos) = ch;
//将最后一个位置的字符设置为'\0'
*(des->str + des->len - 1) = '\0';  //realloc函数在分配空间的时候不会将多余的空间填充为'\0'
}

//删除指定位置的字符
void my_DelPosChar(string*des, int pos)
{
if (IsEmpty(des) != 0 && pos >= 0)
{
//字符串的真实的长度
int relLen = my_StrLen(des->str);
if (relLen < pos)
return;
else
{
//删除操作 字符往前面移动  将pos位置的字符覆盖
for (char*des1 = des->str + pos; *des1 != '\0';)
{
char*des2 = des1;
*des2++ = *++des1;
}
des->len -= 1;
}
}
}
//在此 测试代码比较乱,我就不贴出来了,也是比较简单的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: