行业知识
【c语言】字符函数和字符串函数(上)
2026-11-07 22:06:43
来源:互联网转载
前言
在���程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,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函数返回的是在字符串中 '
- 参数指向的字符串必须要以 '
strlen的模拟实现
' 结束。 ' 前⾯出现的字符个数(不包 含 '
法1
' )。#include#includesize_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的函数使用
strcpy的模拟实现
不返回
用于拷贝字符串
#includevoid my_strcpy(char* dest, const char* src){while (*src)//遇到优化
就停下,跳出while循环{ assert(dest != NULL); assert(src != NULL);//一个个字节从头开始拷贝*dest = *src;dest++;src++;}*dest = *src;//最后把#include//优化void my_strcpy(char* dest, const char* src){ //若有一个为空指针,assert即为假 assert(dest &&src);//先赋值(拷贝)地址再++//最后返回目标空间的起始地址
拷贝过去后,整个表达式为0,跳出循环while (*dest++=*src++){;//空语句}}拷贝过去}int main(){char arr1[20] = "xxxxxxxxxxx";char arr2[] = "hello";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;}char* my_strcpy(char* dest, const char* src){assert(dest && src);//若有一个为空指针,assert即为假//先赋值(拷贝)地址再++//最后strcat的函数使用和模拟实现
拷贝过去后,整个表达式为0,跳出循环char* ret = dest;//保留目标空间的起始位置while (*dest++=*src++){;//空语句}return ret;}strcat的函数使用
strcat的模拟实现
#include#includevoid my_strcat(char* dest, const char* src){assert(dest && src);//保留目标空间的起始位置char* ret = dest;//1.找到目标空间的strcmp的函数使用和模拟实现
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的模拟实现
#includeint my_strcmp(const char* s1, const char* s2){while (*s1 == *s2){if (*s1 == '')return 0;s1++;s2++;}//return *s1-s2;if (*s1 > *s2)return 1;elsereturn -1;}int main(){int ret = my_strcmp("abcdefg", "abcdefg");printf("%d\n", ret);return 0;} 用于追加字符串
- ⽬标空间必须可修改。
注意:以下实现的my_strcat函数不可以自我追加,\0会被覆盖,造成***循环(越界访问)
用于字符串比较,⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩,(不是比长度)。
第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
第⼀个字符串等于第⼆个字符串,则返回0
第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字