前言

在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数~

欢迎关注个人主页:逸狼

创造不易,可以点点赞吗~

如有错误,欢迎指出~

目录

前言

1. 字符分类函数 

例:字母大小分类

例:字母大小写转换

字符串相关函数

strlen的函数使用和模拟实现

strlen的函数使用

strlen的模拟实现

法1

法2

法3:递归

strcpy的函数使用和模拟实现

strcpy的函数使用

strcpy的模拟实现

不返回

优化

返回目标空间的起始地址

strcat的函数使用和模拟实现

strcat的函数使用

strcat的模拟实现

strcmp的函数使用和模拟实现

strcmp的函数使用

 strcmp的模拟实现

1. 字符分类函数 

 C语⾔中有⼀系列的函数是专⻔做字符分类的,使⽤这些函数需要包含的头⽂件是 ctype.h

例:字母大小分类

判断大小写

例:字母大小写转换

大写转小写

字符串相关函数

字符串相关函数要包含头文件string.h

strlen的函数使用和模拟实现

strlen的函数使用

用于计算字符串的个数

strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是⽆符号的

strlen的模拟实现

法1

#include

#include

size_t my_strlen(const char*str)

{

size_t count = 0;

//断言str不为空指针

assert(str != NULL);

while (*str)

{

count++;

str++;

}

return count;

}

int main()

{

char arr[] = "abcdef";

size_t len = my_strlen(arr);

printf("%zd\n", len);

return 0;

}

法2

#include

#include

//strlen的模拟实现

size_t my_strlen2(char* str)

{

assert(str != NULL);

char* start = str;

while (*str)

{

str++;

}

return str - start;

}

法3:递归

size_t my_strlen3(char* str)

{

assert(str != NULL);

if (*str)

{

return 1+my_strlen3(str+1);

}

else

{

return 0;

}

}

strcpy的函数使用和模拟实现

strcpy的函数使用

用于拷贝字符串

 源字符串必须以 '\0' 结束。 会将源字符串中的 '\0' 拷⻉到⽬标空间。⽬标空间必须⾜够⼤,以确保能存放源字符串。⽬标空间必须可修改

strcpy的模拟实现

不返回

#include

void my_strcpy(char* dest, const char* src)

{

while (*src)//遇到\0就停下,跳出while循环

{

assert(dest != NULL);

assert(src != NULL);

//一个个字节从头开始拷贝

*dest = *src;

dest++;

src++;

}

*dest = *src;//最后把\0拷贝过去

}

int main()

{

char arr1[20] = "xxxxxxxxxxx";

char arr2[] = "hello";

my_strcpy(arr1, arr2);

printf("%s\n", arr1);

return 0;

}

优化

#include

//优化

void my_strcpy(char* dest, const char* src)

{

//若有一个为空指针,assert即为假

assert(dest &&src);

//先赋值(拷贝)地址再++

//最后\0拷贝过去后,整个表达式为0,跳出循环

while (*dest++=*src++)

{

;//空语句

}

}

返回目标空间的起始地址

char* my_strcpy(char* dest, const char* src)

{

assert(dest && src);//若有一个为空指针,assert即为假

//先赋值(拷贝)地址再++

//最后\0拷贝过去后,整个表达式为0,跳出循环

char* ret = dest;//保留目标空间的起始位置

while (*dest++=*src++)

{

;//空语句

}

return ret;

}

strcat的函数使用和模拟实现

strcat的函数使用

用于追加字符串

源字符串必须以 '\0' 结束。⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。⽬标空间必须可修改。

strcat的模拟实现

注意:以下实现的my_strcat函数不可以自我追加,\0会被覆盖,造成死循环(越界访问)

#include

#include

void my_strcat(char* dest, const char* src)

{

assert(dest && src);

//保留目标空间的起始位置

char* ret = dest;

//1.找到目标空间的\0

while (*dest)

{

dest++;

}

//2.在dest后面拷贝src的内容

while (*dest++ = *src++)

{

;

}

}

int main()

{

char arr1[20] = "hello ";

char arr2[] = "world";

my_strcat(arr1, arr2);

printf("%s\n", arr1);

return 0;

}

strcmp的函数使用和模拟实现

strcmp的函数使用

用于字符串比较,⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩,(不是比长度)。

第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字

第⼀个字符串等于第⼆个字符串,则返回0

第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

 strcmp的模拟实现

#include

int my_strcmp(const char* s1, const char* s2)

{

while (*s1 == *s2)

{

if (*s1 == '\0')

return 0;

s1++;

s2++;

}

//return *s1-s2;

if (*s1 > *s2)

return 1;

else

return -1;

}

int main()

{

int ret = my_strcmp("abcdefg", "abcdefg");

printf("%d\n", ret);

return 0;

}

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: