自己动手写字符串库函数 二(C语言实现) 分类: C语言学习 2015-01-05 22:46 127人阅读 评论(0) 收藏

接着上一篇的自己动手写字符串你库函数 一(C语言),接着往下面写

//具体实现 string.c
//追加字符
void Append_Char(string*strs, const char ch)
{
	if (IsEmpty(strs) != 0 && ch != NULL)
	{
		int strLen = my_StrLen(strs->str);
		//需要重新分配空间
		strs->str = (char*)realloc(strs->str, strs->len + sizeof(char));
		strs->len += 1;  //长度加+1
		*(strs->str+strs->len - 2) = ch;
		*(strs->str+strs->len - 1) = '';
	}
}

//追加字符串  相当于StrCat函数
void Append_Str(string*strs, const char* s)
{
	if (IsEmpty(strs) != 0 && s != NULL)
	{
		int desStrLen = my_StrLen(strs->str);
		int sourStrLen = my_StrLen(s);
		if (desStrLen + sourStrLen > strs->len)
		{
			//int needLen = desStrLen + sourStrLen - strs->len;
			//重新分配空间  +1是为了最后一个为‘’
			strs->len = desStrLen + sourStrLen + 1;
			strs->str = (char*)realloc(strs->str, strs->len);
			while (*s != '')
			{
				*(strs->str+desStrLen++) = *s++;
			}
		}
		else
		{
			strs->len = desStrLen + sourStrLen + 1;
			while (*s != '')
			{
				*(strs->str+desStrLen++) = *s++;
			}
		}
		*(strs->str+desStrLen) = '';
	}
}

//在母串中查找字符
char* my_Strchr(string*des, char ch)
{
    char*des2 = des->str;
    if (IsEmpty(des) == 0)
        return NULL;
    while (*des2 != '')
    {
        if (*des2 == ch)
            return des2;
        else
            des2++;
    }
    return NULL;
}

//删除的指定的字符串
void my_DelChar(string*des, char ch)
{
    if (IsEmpty(des) == 0 || ch == NULL)
        return;
    else
    {
        char* des2 = my_Strchr(des, ch);
        char*des3 = des2;
        if (des2 == NULL)
            return;
        //将后面的向前移动
        while (*des2 != '')
        {
            *des3++ = *++des2;
        }
        des->len -= 1;  //长度减一
    }
}

//main函数中测试
#include "String.h"

int main()
{
    string strs;
    Init_With_Str(&strs,"tasklist");
    //Append_Char(&strs,'a');
    //Append_Str(&strs,"abc");
    //char*flag= my_Strchr(&strs,'a');
    my_DelChar(&strs,'a');
    Print_String(&strs);
    getchar();
    return 0;
}







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

原文地址:https://www.cnblogs.com/L-Lune/p/4671289.html