zoukankan      html  css  js  c++  java
  • 自己动手写字符串库函数 四(C语言实现) 分类: C语言学习 2015-01-20 23:03 157人阅读 评论(0) 收藏

    上一篇 自己动手写字符串库函数 三(C语言)

    //重置
    void my_StrSet(string *des, const char ch)
    {
    	if (!IsEmpty(des))
    		return;
    	else
    	{
    		char* des1 = des->str;
    		int  desLen = my_StrLen(des->str);
    		while (desLen--)
    			*des1++ = ch;
    	}
    }
    //插入字符串
    void my_InsertStr(string*strs, const char * sour, int pos)
    {
    	if (!IsEmpty(strs) || sour == NULL)
    		return;
    	int desLen = strs->len;
    	int sourLen = my_StrLen(sour);
    	int allLen = desLen + sourLen;
    	int flag = pos;
    	if (pos<0 || pos>desLen)
    		return;
    	strs->str = (char*)realloc(strs->str, desLen + sourLen + sizeof(char));
    	if (strs->str == NULL)
    		return;
    	char* des1 = strs->str;
    	strs->len = sourLen + desLen + sizeof(char);
    	while (desLen >= pos)
    		*(des1 + (desLen--) + sourLen) = *(des1 + desLen);
    	while (pos < flag + sourLen)
    		*(des1 + pos++) = *sour++;
    	//将最后一个位置的字符设置''
    	*(des1 + strs->len) = 0;
    }
    void my_DelPosStr(string*strs, int start, int end)
    {
    	if (!IsEmpty(strs))
    		return;
    	int desLen = my_StrLen(strs->str);
    	if ((start < 0 || end <= start) || (start>desLen || end>desLen))
    		return;
    	int len = end - start;
    	char*des1 = strs->str;
    	//strs->len -= len;
    	while (end <= desLen)
    	{
    		*(des1 + start++) = *(des1 + end++);
    	}
    	strs->len -= len;
    }
    //将字符串转为整数  那么如果将数字转为字符也是简单的事
    void my_atoi(string*strs, int* num)
    {
    	if (!IsEmpty(strs) || num == NULL)
    		return;
    	char* des = strs->str;
    	//1.检测能不能转换 
    	for (size_t i = 0; i < strs->len - 1; i++)
    	{
    		if (*(des + i)<'0' || *(des + i)>'9')  //不能转换
    			return;
    	}
    	int result = 0;
    	while (*des != '')
    	{
    		result *= 10;
    		result += *des++ - 48; //那么如果将数字转为字符也是简单的事
    	}
    	*num = result;
    }
    
    //字符串比较  大返回1,小于返回0,相等返回2
    int my_strcmp(char*strs, char * sour)
    {
        if (!IsEmpty(&strs) || sour == NULL)
            return;
        char*des = strs;
        while (*sour != '')
        {
            if (*sour == *des)
            {
                sour++;
                des++;
                if (*sour == '' && *des == '')
                    return 2;
            }
            else
            {
                if (*des > *sour)
                    return 1;
                else
                    return 0;
            }
        }
        return 1;
    }
    
    //字符串比较 忽略大小写 
    //对原来的字符串没有影响
    int my_stricmp(char*strs, const char * sour)
    {
        if (!IsEmpty(&strs) || sour == NULL)
            return;
        int desLen = my_StrLen(strs);
        int sourLen = my_StrLen(sour);
        char* des = (char*)malloc(desLen + 1);
        strcpy(des, strs);
        char*sour1 = (char*)malloc(sourLen + 1);
        strcpy(sour1, sour);
        int len = desLen <= sourLen ? desLen : sourLen;
        //将大写转为小写
        for (int i = 0; i < len; i++)
        {
            if (!((*(des + i) >= 'A' && *(des + i) <= 'Z')))
                *(des + i) = *(des + i) - 32;
            if (!((*(sour1 + i) >= 'A' && *(sour1 + i)  <= 'Z')))
                    *(sour1 + i) = *(sour1 + i) - 32;
        }
        return my_strcmp(des, sour1);
    }
    
    
    
    
    //测试代码  main函数
    #include "String.h"
    
    int main()
    {
        string strs;
        int *num = (int*)malloc(sizeof(int));
        Init_With_Str(&strs, "tasklist");
        //my_InsertChar(&strs,'A',11);
        //my_DelPosChar(&strs,1);
        //my_StrSet(&strs,'A');
        /*my_InsertStr(&strs, "abc", 8);
        my_DelPosStr(&strs,10,11);*/
    
        /*my_StrSet(&strs,'1');
        my_atoi(&strs, num);
        */
        my_StrCopy(&strs,"1234567");
        my_atoi(&strs, num);
        printf("%d
    ", *num);
        free(num);  //释放内存
        num=NULL;
         //Print_String(&strs);
        getchar();
        return 0;
    }
    
    

    总结:写到这里算是对字符串处理,告一段落了,写完了才发现,字符串的处理就是对数组链表的处理,其实这里对效率没有要求,新手了,算是对指针的联系了,最后我把源码贴出,由于都是晚上写,肯定有错误支出,希望大家能谅解,我会及时更正

    http://download.csdn.net/detail/mingyueruya/8381295

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

  • 相关阅读:
    前端性能优化--图片处理(Css Sprites 与 base64)
    CSS规范--春风十里不如写好CSS
    前端性能优化--图片懒加载(lazyload image)
    struts2不同版本在核心filter在web.xml中的配置
    Web.xml配置详解之context-param
    web.xml的加载过程是context-param >> listener >> fileter >> servlet
    web.xml中Listener的作用
    web.xml中Filter的作用
    字符串反转
    fastjson是什么东东?
  • 原文地址:https://www.cnblogs.com/L-Lune/p/4671287.html
Copyright © 2011-2022 走看看