1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言程序设计 | 模拟实现字符串操作函数:strlen strcmp strcpy strcat strchr strstr

C语言程序设计 | 模拟实现字符串操作函数:strlen strcmp strcpy strcat strchr strstr

时间:2023-03-29 02:18:05

相关推荐

C语言程序设计 | 模拟实现字符串操作函数:strlen  strcmp  strcpy  strcat  strchr  strstr

模拟实现字符串和内存操作函数(一)目录:

strlenstrcpystrcatstrcmpstrstrstrchr

strlen

size_t strlen(const char* str)

字符串以‘\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数(不包含’\0’)。参数指向的字符串必须要以‘\0’结束。函数的返回值为size_t,是无符号类型。因为是模拟库函数,所以为了防止调用者放入空指针或者防止传入的字符串被修改,下面的函数中会用到assert函数和const。

size_t my_strlen(const char* p){size_t count = 0;assert(p != NULL);while (*p){count++;p++;}return count;}

strcpy

char* strcpy(char* dst,const char* src)

strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。源字符串必须以’\0’结束会将源字符串的’\0’拷贝到目标空间目标空间必须可变,并且具有足够大的空间来存放源字符串

char* my_strcpy(char* dst, const char* src){char* str = dst;assert(dest && src);while (*dest++ = *src++);//当指针指向位置为'\0'时结束拷贝return str;}

strcat

char* strcat(char* dst,const char* src)

strcat把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面。源字符串必须以’\0’结束会将源字符串的’\0’拷贝到目标空间目标空间必须可变,并且具有足够大的空间来存放源字符串

char* my_strcat(char* dst, const char* src){assert(dst && src);char* str = dst;while (*dst){dst++;}//找到dst的结束位置while (*dst++ = *src++);//在末尾拼接src*dst = *src;//拷贝src的'\0'return str;}

strcmp

int my_strcmp(const char* str1, const char* str2)

strcmp两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。源字符串必须以’\0’结束当str1<str2时,返回为负数,当str1=str2时,返回值= 0当str1>str2时,返回为正数需要将类型强转为unsighed char* ,因为对比的是ASCII码值,但是当大于127时会自动将其按照补码的形式转换为负数,则会产生错误

int my_strcmp(const char* str1, const char* str2){unsigned char* s1 = (unsigned char* )str1;unsigned char* s2 = (unsigned char* )str2;while (*s1 && *s2){if (*s1 < *s2)return -1;else if (*s1 > *s2)return 1;else{s1++;s2++;}}if ('\0' == *s1 && '\0' == *s2)return 0;else if ('\0' == *s1)return -1;elsereturn 1;//当两边字符数不相同的时候进行判断}

strstr

char* my_strstr(const char* src, const char* sub)

strstr返回一个指针,指向sub在src中首次出现的位置。

char* my_strstr(const char* src, const char* sub){assert(src && sub);const char* src1 = src;const char* sub1 = sub;while (*src1){while (*src1 == *sub1 && *sub1){src1++;sub1++;}if ('\0' == *sub1){return src;}//当*sub1指向'\0'时,说明sub1和src1完全相同,此时返回srcelse{sub1 = sub;src1 = ++src;}//如果不同,则sub1回溯,*src1继续走向下一个位置}return NULL;}

strchr

char* strchr(char* dst,const char* src)

strchr返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。

char* my_strchr(const char* str,const char c){assert(str);while (*str){if (*str == c)return str;elsestr++;}return NULL;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。