• 自己动手写字符串库函数 三(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 != '';)
    		{
    			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 != '')
    		{
    			*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;
    	//将最后一个位置的字符设置为''
    	*(des->str + des->len - 1) = '';  //realloc函数在分配空间的时候不会将多余的空间填充为''
    }
    
    //删除指定位置的字符
    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 != '';)
    			{
    				char*des2 = des1;
    				*des2++ = *++des1;
    			}
    			des->len -= 1;
    		}
    	}
    }
    //在此 测试代码比较乱,我就不贴出来了,也是比较简单的
    

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

  • 相关阅读:
    博客园美化(三)
    博客园美化(二)
    python异常处理
    博客园美化(一)
    STD二手图书交流平台团队博客-用户画像
    STD二手图书交流平台团队博客-电梯演讲
    学习如何运用GitHub网站+出现的问题+Git基本操作总结
    人月神话阅读笔记(二)
    人月神话阅读笔记(一)
    Android studio Handler消息处理1
  • 原文地址:https://www.cnblogs.com/L-Lune/p/4671288.html
Copyright © 2020-2023  润新知