实现C语言常用字符串库函数

 更新时间:2021年11月17日 15:00:35   作者:尖兵果子  
这篇文章主要为大家介绍了如何实现C语言常用字符串库函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

strlen

数组长度的计算是通过strlen来的,它的作用就是判断给定的数组元素个数,直到碰到\0结束

函数原型

size_t strlen ( const char * str );

废话少说,直接上代码

int my_strlen(char *str)
{
	char* ch=str;
	int count=0;
	while(*ch!='\0')
	{
		count++;
		ch++;
	}
	return count;
}

但考虑到安全性,因为求长度并不会改变源字符串,所以加上const修饰char,保证该字符串的内容不能被修改,但是可以改变指向

int my_strlen(const char *str)
{
	char* ch=str;
	int count=0;
	while(*ch!='\0')
	{
		count++;
		ch++;
	}
	return count;
}

strcpy

strcpy是将一个字符串含\0整体拷贝到另一个字符串中

原型为

char * strcpy ( char * destination, const char * source );
void my_strcpy(char* dest,const char *src)
{
	char * ch=src;
	while(*ch!='\0')
	{
		*dest=*ch;
		dest++;
		ch++;
	}
	*dest='\0';
}

同理不改变原字符串,所以加上const修饰。在最后记得手动给目的字符串加上\0,这样才能保证输出正确

strcat

原型

char * strcat ( char * destination, const char * source );
void my_strcat(char* dest,const char *src)
{
	char * ch=dest;
	while(*ch!='\0')ch++;
	while(*src!='\0')
	{
		*ch=*src;
		ch++;
		src++;
	}
	*ch='\0';
}

先遍历跑完目的字符串,接着再将原字符串所指的值一一赋给目的字符串.而因为是把原接在目的字符串后,所以目的字符串要足够大

strcmp

原型

int strcmp ( const char * str1, const char * str2 );
int my_strcmp(const char* str1,const char *str2)
{
	assert(str1);
	assert(str2);
	char * s1=str1;
	char * s2=str2;
	while(*s1==*s2)
	{
		if(*s1=='\0')
		{
			return 0;
		}
		s1++;
		s2++;
	}
	if(*s1>*s2)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}



上面代码最后可以简化为return *s1-*s2,不过主函数里要相应更改了

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 深入解析C语言中的内存分配相关问题

    深入解析C语言中的内存分配相关问题

    这篇文章主要深入地介绍了C语言中的内存分配,C语言编程中的内存泄漏问题一直以来都是C编程中的一大棘手问题,本文从malloc和指针等方面对C内存进行了深层次讲解,强烈推荐!需要的朋友可以参考下
    2015-08-08
  • C++数据结构模板进阶的多方面分析

    C++数据结构模板进阶的多方面分析

    今天我要给大家介绍C++中的模板更深的一些知识。有关于非类型的模板参数和模板特化的一些知识,感兴趣的朋友快来看看吧
    2022-02-02
  • C++入门概览和尝试创建第一个C++程序

    C++入门概览和尝试创建第一个C++程序

    这篇文章主要介绍了C++入门概览和尝试创建第一个C++程序,同时也包括编写类的示例展示C++面向对象的特性,需要的朋友可以参考下
    2015-09-09
  • C语言 指针的初始化赋值案例详解

    C语言 指针的初始化赋值案例详解

    这篇文章主要介绍了C语言 指针的初始化赋值案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 浅析C++中前置声明的应用与陷阱

    浅析C++中前置声明的应用与陷阱

    以下是对C++中前置声明的应用与陷阱进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • C++实现哈夫曼编码

    C++实现哈夫曼编码

    这篇文章主要为大家详细介绍了C++实现哈夫曼编码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言中递归的实际应用与经典问题

    C语言中递归的实际应用与经典问题

    函数以及函数的递归调用是学习C语言必须要掌握的内容,且递归作为经典的算法思想被广泛应用于程序设计中,下面这篇文章主要给大家介绍了关于C语言中递归的实际应用与经典问题的相关资料,需要的朋友可以参考下
    2021-09-09
  • C++详解多线程中的线程同步与互斥量

    C++详解多线程中的线程同步与互斥量

    线程间如何通信同步?一些伙伴好奇线程间的通信及同步方法,没关系,下面小编就继续给大家科普下线程间通信及同步的方法以及互斥量
    2022-05-05
  • ubuntu系统vscodeC++编译环境配置与使用方式

    ubuntu系统vscodeC++编译环境配置与使用方式

    这篇文章主要介绍了ubuntu系统vscodeC++编译环境配置与使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • M1 Macbook vscode C++ debug调试实现

    M1 Macbook vscode C++ debug调试实现

    本文主要介绍了M1 Macbook vscode C++ debug调试,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论