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

    在coding中最常使用的就是对于字符串的处理问题,接下来我们自己动手写库函数,尽量使用指针操作,而不是数组操作

    //头文件 string.h
    #include <stdio.h>
    #include <stdlib.h>
    
    //字符串结构体
    typedef struct CString
    {
    	char* str;
    	int len;
    }string;
    
    //初始化
    void Init(string* str);
    void Init_With_Len(string* str, int len);
    void Init_With_Str(string*str, const char*strcopy);
    //打印字符串
    void Print_String(string*str);
    //追加字符
    void Append_Char(string*str, const char s);
    //追加字符串
    void Append_Str(string*str, const char*s);
    //计算字符串的长度
    int my_StrLen(const char*str);
    //字符串复制
    char* my_StrCopy(string*des, const char*sour);
    //字符串连接
    char* my_StrCat(string*des, char* sour);
    //字符查找
    char* my_Strchr(string*des, char ch);
    //字符串查找
    char* my_FindStr(string*des, char*sour);
    //删除指定的字符
    void my_DelChar(string*des, char ch);
    //指定的位置插入字符
    void my_InsertChar(string*des, char ch,int pos);
    //判断是否为空
    int IsEmpty(string*strs);


    //函数的具体实现 string.c
    #include "String.h"
    
    //判断是否为空
    int IsEmpty(string*strs)
    {
    	//先判断strs是否为空 再判断strs->str是否为空
    	if (strs == NULL || strs->str == NULL)
    		return 0;
    	else
    		return 1;
    }
    
    //获取字符串的长度
    int my_StrLen(const char*str)
    {
    	if (str == NULL)
    		return -1;
    	int count = 0;
    	while (*str++ != '')
    		count++;
    	return count;
    }
    
    //初始化
    void Init(string* str)
    {
    	str->str = NULL;
    	str->len = 0;
    }
    
    void Init_With_Len(string*str, int len)
    {
    	str->str = (char*)calloc(len, sizeof(char));
    	str->len = len;
    }
    
    void Init_With_Str(string*strs, const char* strcopy)
    {
    	if ( IsEmpty(strs) != 0|| strcopy == NULL)
    		return;
    	else
    	{
    		//计算字符串的长度
    		int count = my_StrLen(strcopy);
    		//注意使用calloc进行空间的分配  count+sizeof(char) 是为了最后一个放入''
    		strs->str = (char*)calloc(count + sizeof(char), sizeof(char));
    		strs->len = count + sizeof(char);
    		//strcpy(strs->str, strcopy);
    		strs->str = my_StrCopy(strs, strcopy);
    	}
    }
    
    //字符串复制
    char* my_StrCopy(string*des, const char*sour)
    {
           if (des->str == NULL || sour == NULL)
            return NULL;
        char* strTmp = des->str;
        int sourLen = my_StrLen(sour);
        while (*sour != '')
            *strTmp++ = *sour++;
        *(des->str + sourLen) = '';
        des->len = sourLen;
        return des->str;
    }
    
    
    //打印字符串
    void Print_String(string* strs)
    {
    	if (IsEmpty(strs) != 0)
    		printf("%s
     ", strs->str);
    	else
    		return;
    }
    

    //主函数中测试 main.c
    #include "String.h"
    
    int main()
    {
    	string strs;
    	Init_With_Str(&strs,"tasklist"); 
        Print_String(&strs);//result: tasklist
    }


    
    

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

  • 相关阅读:
    Neo4j
    linux系统中如何建立与删除软连接(方便快捷使用,大量节约时间)
    eclipse/myeclipse 中,如何删除已经下载过的插件(举例:删除scala ide)
    dayday up
    元类
    sort和sorted
    反射
    继承派生
    property
    python3.5和3.6区别
  • 原文地址:https://www.cnblogs.com/L-Lune/p/4671290.html
Copyright © 2011-2022 走看看