c/c++语言开发共享C语言常用库函数的使用及模拟实现详解例举

经历了c语言基础篇的学习,让我们来简单了解几个c语言的库函数!1.strlen字符串已经 '' 作为结束标志,strlen函数返回的是在字符串中 '' 前面出现

经历了c语言基础篇的学习,让我们来简单了解几个c语言的库函数!

1.strlen

字符串已经 '' 作为结束标志,strlen函数返回的是在字符串中 '' 前面出现的字符个数(不包 含 '' )。

 函数的模拟实现

1.计数法

int my_strlen(dest)  {  int count=0;      while(dest)//当dest等于''时停止循环  {      count++;      dest++;  }  return count;  }

2.递归法

int my_strlen(char* dest)  {      int count=0;      if(*dest!='0')      {          dest++;          count++;          return my_strlen(dest,count)      }      else      return count;  }

3.指针减指针

int my_strlen(char* dest)  {      char* arr=dest;//定义一个新指针指向dest      while(*arr)//直到arr指向''      {      arr++;      }      return (arr)-(dest);//指针相减代表两个指针之间的元素个数  }

2.strcpy

char* strcpy ( char * destination , const char * source )

会将源字符串中的 '' 拷贝到目标空间。

目标空间必须足够大,并且可变以确保能存放源字符串。

 函数的模拟实现

char* my_strcpy(char* dest, const char* str)  {  	char* arr1 = dest;  	while ((*dest++ = *str++)!='')  	{  		;  	}  	return arr1;  }  int main()  {  	char arr1[] = "***************";  	char arr2[] = "hello word";  	my_strcpy(arr1, arr2);  	printf("%s", arr1);  	return 0;  }

3.strcmp

int strcmp ( const char * str1, const char * str2 );

第一个字符串大于第二个字符串,则返回大于0的数字

第一个字符串等于第二个字符串,则返回0

第一个字符串小于第二个字符串,则返回小于0的数字

函数的模拟实现

int my_strcmp(char* arr1,char* arr2)  {  	while(*arr1 == *arr2)  	{  		if (*arr1 == '' && *arr2 == '')  		{  			return 0;  		}  		else  		{  			arr1++; arr2++;     		}  	}if (*arr1 > *arr2)  	{  		return 1;  	}  	else if (*arr1 < *arr2)  	{     		return -1;  	}  }

4.strcat

char * strcat ( char * destination, const char * source );

函数的模拟实现

char* my_strcat(char* dest, char* str)  {  	char* ret = dest;  	while (*dest)  	{  		dest++;  	}  	while (*dest++=*str++)  	{  		;  	}  	return ret;  }  int main()  {  	char arr1[50] = "hello";  	char arr2[] = "word";  	char* count=my_strcat(arr1, arr2);  	printf("%s", count);  	return 0;  }

5.strstr

char * strstr ( const char *str1, const char * str2);

函数的模拟实现

char* my_strstr(char* dest, char* str)  {  	char* arr1 = str;  	char* cur = dest;  	while (*cur)  	{  		str = arr1;  		dest = cur;  		if (*dest != *str)  		{  			dest++;  			str++;  		}  		else if (*dest == *str)  		{  			while (*dest == *str)  			{  				dest++; str++;     			}if (*str == '')  			{  				return cur;  			}  		}  		cur++;  	}return null;  }  int main()  {  	char arr1[] = "abbbcdef";  	char arr2[] = "bbc";  	char* ret=my_strstr(arr1, arr2);  	if (null == ret)  	{  		printf("找不到子串n");  	}  	else  	{  		printf("%sn", ret);  	}  	return 0;  }

6.strtok

char * strtok ( char * str, const char * sep );

strtok函数的第一个参数不为 null ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

strtok函数的第一个参数为 null ,函数将在同一个字符串中被保存的位置开始,查找下一个标记

int main()  {  	char buff[] = "www.aaabbbccc@qq.com";  	char buf[20] = { 0 };  	strcpy(buf, buff);  	char* sep=".@";  	char* str = null;  	for (str = strtok(buf, sep); str != null; str = strtok(null, sep))  			{//null是从保存好的位置开始往后找  				printf("%sn", str);  			}  	return 0;  }

7.字符分类函数

8.memcpy&memmove

void * memcpy ( void * destination , const void * source , size_t num )

函数模拟实现 

void* my_memmove(void* dest,void* str , size_t count)  {  	void* ch = dest;  	if (dest > str)  	{  		while (count--)  		{  			*((char*)dest + count) = *((char*)str + count);  		}  	}  	else  	{  		while (count--)  		{  			*(char*)dest = *(char*)str;  			dest=(char*)dest+1;  			str=(char*)str+1;  		}  	}  }  int main()  {  	int arr1[10] = {1,2,3,4,5,6,7,8,9,10};  	my_memmove(arr1+2, arr1 , 20);  	int sz = sizeof(arr1) / sizeof(arr1[0]);  	for (int i = 0; i < sz; i++)  	{  		printf("%d", arr1[i]);  	}  	return 0;  }

9.memcmp 

int memcmp ( const void * ptr1 , const void * ptr2 , size_t num );

 函数模拟实现

void* my_memcmp(char* arr, char* arr1, int count)  {  	while (count--)  	{  		if (*(char*)arr > *(char*)arr1)  		{  			return 1;  		}  		else if ((*(char*)arr < *(char*)arr1))  		{  			return -1;  		}  		arr++; arr1++;  	}	return 0;  }  int main()  {  	int arr[] = { 1,2,3,4,5 };  	int arr1[] = { 1,2,3,4,4 };  	int ret=my_memcmp(arr, arr1, 20);  	printf("%d", ret);  	return 0;  }

到此这篇关于c语言常用库函数的使用及模拟实现详解例举的文章就介绍到这了,更多相关c语言 库函数内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享C语言常用库函数的使用及模拟实现详解例举,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1082215.html

(0)
上一篇 2022年4月24日
下一篇 2022年4月24日

精彩推荐