自己动手写字符串库函数 三(C语言实现) 分类: C语言学习 2015-01-11 23:14 156人阅读 评论(0) 收藏

//子串同母串比较 是否在母串中  第二种方法
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;
		}
	}
}
//在此 测试代码比较乱,我就不贴出来了,也是比较简单的

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-01-11 23:14  mingyueruya  阅读(154)  评论(0编辑  收藏  举报