自己动手写字符串库函数 一(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++ != '\0')
		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) 是为了最后一个放入'\0'
		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 != '\0')
        *strTmp++ = *sour++;
    *(des->str + sourLen) = '\0';
    des->len = sourLen;
    return des->str;
}


//打印字符串
void Print_String(string* strs)
{
	if (IsEmpty(strs) != 0)
		printf("%s\n ", strs->str);
	else
		return;
}

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

int main()
{
	string strs;
	Init_With_Str(&strs,"tasklist"); 
    Print_String(&strs);//result: tasklist
}





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

posted @ 2015-01-01 12:29  mingyueruya  阅读(151)  评论(0编辑  收藏  举报