文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言常用库函数的使用及模拟实现详解例举

2024-04-02 19:55

关注

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

1.strlen

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

 函数的模拟实现

1.计数法

int my_strlen(dest)
{
int count=0;
    while(dest)//当dest等于'\0'时停止循环
{
    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指向'\0'
    {
    arr++;
    }
    return (arr)-(dest);//指针相减代表两个指针之间的元素个数
}

2.strcpy

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

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

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

 函数的模拟实现

char* my_strcpy(char* dest, const char* str)
{
	char* arr1 = dest;
	while ((*dest++ = *str++)!='\0')
	{
		;
	}
	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 == '\0' && *arr2 == '\0')
		{
			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 == '\0')
			{
				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("%s\n", 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("%s\n", str);
			}
	return 0;
}

7.字符分类函数

iscntrl 任何控制字符
isspace空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'
isdigit十进制数字 0~9
isxdigit十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower小写字母a~z
isupper大写字母A~Z
isalpha字母a~z或A~Z
isalnum字母或者数字,a~z,A~Z,0~9
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph
任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

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语言 库函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯