模拟实现strcpy,strcmp,strcat,strstr.strlen

xiaoxiao2021-02-28  101

strcpy函数实现

strcpy :字符串拷贝函数,  函数原型 char* strcpy(char* dest,char* src)    从stc的起始地址开始,到'\0'结束。 所以dest必须有足够的空间来容纳src。头文件#include<string.h>

char* my_strcpy(char* dest, const char* src) { assert(dest); assert(src); char* ret = dest; while ((*dest++) = (*src++)) { ; } return ret; } 测试部分 int main() { char arr[20]; char* str= "hello "; char* ret = my_strcpy(arr, str); printf("%s\n", ret); system("pause"); return 0; }

strcat函数实现

strcat :字符串连接函数 ,把src指向的字符串添加到dest后,(src直接覆盖dest结尾处的‘\0’)  原型  char* strcat(char *dest,const char* src);   头文件#include<string>  注意事项: dest和src俩块空间不能有重叠部分,dest必须有足够大的空间来容纳srt,返回dest的指针 char* my_strcat(char* dest, const char* src) { char* ret = dest; assert(dest); assert(src); while (*dest) { *dest++; } while (*dest++ = *src++) { ; } return ret; } 测试部分 int main() { char arr1[20] = "hello"; char arr2[] = "sust"; char* ret = my_strcat(arr1, arr2); printf("%s\n", ret); system("pause"); return 0; }arr1 的空间一定要足够大

strcmp函数实现

strcmp:字符串比较函数,俩个字符串自左向右逐个字符比较(按ASCIIZ值的大小比较)直到出现不同的字符或者‘\0’。若这俩个字符串为str1,str2,             若str1==str2,返回0;             若str1>str2 ,返回正数;             若str1<str2,返回负数;                   int my_strcmp(const char* dest,const char* src) { int ret = 0; while (*dest == *src) { if (*dest == '\0') { return 0; } *dest++; *src++; } return *dest - *src; } 测试  int main() { char arr1[10] = "sust"; char arr2[10] = "sust"; int ret = my_strcmp(arr1, arr2); printf("%d\n", ret); system("pause"); return 0; }

strstr函数实现

 strstr:在字符串中找子串   char* strstr(char* str1,char * str2)  在str1中找str2,如果找到了返回strp2在str1中首次出现的地址,如果没找到返回NULL。 char* my_strstr(const char* str1, const char* str2) { char *cp = (char*)str1; char *substr = (char*)str2; char *s1 = str1; assert(str1); assert(str2); if (*str2 == '\0') return NULL; while (*cp) { s1 = cp; substr = str2; while (*s1&&*substr && (*s1 == *substr)) { s1++; substr++; } if (*substr == '\0') return cp; cp++; } }

strlen函数实现

strlen:求字符串长度函数,从开始直到遇到'\0'结束,返回计数器的值不包含‘\0 ’; 法一: int my_strlen(const char *str) { int count = 0; while (*str) { count++; str++; } return count; } 法二:递归法 int my_strlen(const char *str) { if (*str=='\0') return 0; else return 1 + my_strlen(str + 1); } 测试 int main() { char arr[10] = "hello"; int ret = my_strlen(arr); printf("%d\n", ret); system("pause"); return 0; }

转载请注明原文地址: https://www.6miu.com/read-60765.html

最新回复(0)