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

目录

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr

6.strtok

7.字符分类函数

8.memcpy,memmove

10.memcmp


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)}elsereturn count;
}

3.指针减指针

int my_strlen(char* dest)
{char* arr=dest;//定义一个新指针指向destwhile(*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;
}

10.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语言】库函数的使用与模拟实现(strlen、strcpy、strcmp....相关推荐

  1. C语言库函数的实现(strlen strcpy strcmp strcat strstr)

    库函数的实现 strlen strcpy strcmp strcat strstr assert函数 头文件:assert.h 又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的 ...

  2. 模拟实现strlen,strcpy函数

    模拟实现strlen,strcpy函数 strlen 是计算机C语言函数,计算字符串s的(unsigned int型)长度,不包括'\0'在内.strlen所作的仅仅是一个计数器的工作,它从内存的某个 ...

  3. strlen, strcpy,strcmp,strcat,strncpy,strncmp,strncat,strst库函数的详细解析以及模拟实现

  4. 《C语言杂记》理解字符串处理函数 strlen() strcpy() strcat() strcmp()

    在linux C 编程中,我们经常遇到字符串的处理,最多的就是字符串的长度.拷贝字符串.比较字符串等:当然现在的C库中为我们提供了很多字符串处理函数.熟练的运用这些函数,可以减少编程工作量,这里介绍几 ...

  5. C语言中的字符与字符串库函数的使用以及模拟实现

    目录 一.求字符串长度 1.strlen库函数如何使用? 2.如何模拟实现strlen函数 二.长度不受限制的字符串函数 1.库函数 strcpy 如何使用? 2.如何模拟实现 strcpy 函数? ...

  6. C语言库函数的模拟实现

    目录 C语言库函数的模拟实现 1.求字符串长度  ---  strlen的模拟实现 2.拷贝字符串  ---  strcpy的模拟实现 3.追加字符串  ---  strcat的模拟实现 4.比较字符 ...

  7. 【C语言】详解strlen函数 | 模拟实现strlen函数的三种方法 | 写库函数的人是如何实现这个函数的

    前言: 本篇将专门为 strlen 函数进行讲解,总结了模拟实现 strlen 函数的三种方法,并对其进行详细的解析.手写库函数是非常常见的题目,希望通过本篇博客能够加深大家对 strlen 的理解. ...

  8. 【C语言】字符串库函数的解读和模拟实现第一弹(strlen、strcpy、strcat、strcmp、strncpy、strncat 及 strncmp)

    目录 一. strlen函数 1.1 strlen函数实现的功能及函数原型 1.1.1 strlen函数实现的功能 1.1.2 strlen的函数原型 1.1.3 strlen实现功能的更进一步解读 ...

  9. C语言 模拟实现 strlen strcat strcpy函数

    strlen函数 库函数strlen:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0' ...

  10. C语言——字符串+内存函数及其模拟实现

    目录 0. 思维导图 1. 前言 2. 函数介绍 2.1 strlen 2.2 strcpy 2.3 strcat 2.4 strcmp 2.5 strncpy 2.6 strncat 2.7 str ...

最新文章

  1. runtime自动归档/解档
  2. redis集群之哨兵模式【原】
  3. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
  4. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?
  5. [译]技术之外,工作之内,非常实际有用的技巧--如何宣布坏消息?
  6. 浏览器本地存储(cookie、sessionStorage和localStorage)
  7. 利用UICollectionView实现瀑布流
  8. HCIE Security 防火墙转发流程及相关知识点 备考笔记(幕布)
  9. 【keras】数据增强之---ImageDataGenerator
  10. 鲍威尔法源程序码matlab,十一、Powell算法(鲍威尔算法)原理以及实现
  11. 使用Cadence组件进行Pspice仿真
  12. 华为云空间兑换码在哪里找_华为云空间在哪里找到
  13. 初次软件开发(总结篇 之二)_-Chaz-_新浪博客
  14. 关于“嵌入式系统设计师”的了结。
  15. IELAB网络实验室 理解IGRP协议
  16. IF:11+ 鳞癌基因标记预测肺腺癌患者的预后和免疫治疗的敏感性
  17. 如何计算IP地址的范围
  18. 数据分析面试题--SQL面试题
  19. 202个DIY及科技网站大集合
  20. cuda cudnn tensorflow对应_Cuda 的安装步骤

热门文章

  1. java http url 401 unauthorized_java - 为什么我在Maven中收到“401 Unauthorized”错误?
  2. BMC固件漏洞导致OT和IoT设备易受远程攻击
  3. linux系统媒体播放器(media player)大全
  4. 返回类型和return语句
  5. Ansible(十七)-- ansible 中的循环(二) with_items with_list with_flattened with_together之间的区别和联系
  6. 安卓开发 之小白养成-Service详解
  7. sas retain和_all_
  8. android 11 固定WIFI热点路由器IP
  9. 成长与发展---如何在工作中名副其实地脱颖而出
  10. 如何手动关闭elementUI的popover