本篇文章给大家分享的是有关使用C语言怎么实现一个字符函数功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
C语言字符函数,内存函数功能及实现strlen函数(求字符串长度)注意点模拟实现拷贝字符串函数(字符串拷贝函数)注意点模拟实现strcat函数(字符串衔接函数)注意点模拟实现比较字符串函数注意点模拟实现strstr函数模拟实现strtok函数使用strerror函数使用memcpy函数注意点模拟实现memmove函数注意点模拟实现memset函数注意点
strlen函数(求字符串长度)
统计字符串长度直到\ 0为止
注意点
1,属于& lt; string.h>库
2,参数为字符串,返回类型为无符号整型,特别注意下图
此图运行结果为祝辞,因为无符号整型加减必为大于0的数,所以此类比较需要避免
3,结束标志为\ 0
模拟实现
int my_strlen (const char * str) { 维护才能(str); 如果才能(* str==& # 39; \ 0 & # 39;) { ,,,return 0; ,,} return 才能;1,+,my_strlen(时间+ str 1);//采用递归方式 }
拷贝字符串函数(字符串拷贝函数)
将sorc数组内第一个\ 0前(包括\ 0)的所有内容拷贝到桌子数组。
注意点
1,桌子数组需要足够容纳源数组
2,源数组一定要有\ 0作为中止标识
3,桌子数组要可以更改
4, \ 0会被拷入
模拟实现
char * my_strcpy (char *桌子,const char * sorc) { 维护才能(dest ,,, sorc); char 才能;* ret =,桌子; while 才能;(*桌子+ +,=,* sorc + +)//当/0被最后一次拷入时,跳出循环 {才能 ,,,, ,,} return 才能;回收; }
strcat函数(字符串衔接函数)
从桌子数组的第一个\ 0开始将sorc函数内第一个\ 0前的全部内容拷贝,桌子函数的第一个\ 0会被覆盖,sorc函数的\ 0会被拷入。
注意点
1,桌子数组要足够容纳自身和源数组
2,桌子数组必须空间可修改
3,桌子,源数组都有\ 0
4,不可以自己拷贝自己,因为没有中止条件
模拟实现
char * my_strcat (char *桌子,const char * sorc) { char 才能;* ret =,桌子; while 才能;(* dest !=, & # 39; \ 0 & # 39;) {才能 ,,,桌子+ +; ,,} while 才能;(*桌子+ +,=,* sorc + +) {才能 ,,,, ,,} return 才能;回收; }
比较字符串函数
比较两个字符串,逐位比较,若对应位不相同则返回ASCII码相减的值,若每一位相同(即整个字符串相同)返回0。
注意点
1,比较的不是长度,而是对应位置的ASCII码值
模拟实现
int my_strcmp (const char * str1, const char * str2) { 维护才能(str1 ,,, str2); while 才能;(* str1 ==, * str2) {才能 ,,,if (* str1 ==, & # 39; \ 0 & # 39;,,,, * str2 ==, & # 39; \ 0 & # 39;) ,,,{ ,,,,,return 0; ,,,} ,,,str1 + +; ,,,str2 + +; ,,} return 才能;* str1 作用;* str2; }
strstr函数
在母串中寻找子串,若找到则返回母串中子串的首地址,若没找的则返回空指针
模拟实现
此处使用暴力方法求解,公里算法可提供更优解
char * my_strstr (char *妈妈,,char *孩子) { 维护才能(mum ,,,孩子); const 才能;char * pc =,妈妈; while 才能;pc (*) {才能 ,,,const char * p1 =,电脑; ,,,const char * p2 =,孩子; ,,,while (* p1 ==, * p2 ,,, * p1 ,,, * p2) ,,,{ ,,,,,p1 + +; ,,,,,p2 + +; ,,,} ,,,if (* p2 ==, & # 39; \ 0 & # 39;) ,,,{ ,,,,,return (char *)电脑; ,,,} ,,,电脑+ +; ,,} return 才能;零; }
strtok函数
1,两个参数(arr源字符串,9月符号字符串(切割标志))
2,希望得到第二个字符串时候需要传入空指针