和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
2017-05-18 17:26
831 查看
strlen 函数原型: size_t strlen(const char* string); 功能: 计算字符串长度,遇到‘/0’停下; #include<stdio.h> #include<assert.h> #include<stdlib.h> //用计数器统计 int my_strlen(const char*str) { assert(str != NULL); int count = 0; //在遇到'/0'之前,指针向后挪动一次,count加1 while (*str++) { count++; } return count; } //利用指针相减 int my_strlen(const char*str) { assert(str != NULL); char*pc = str; //在遇到'/0'之前,通过指向向后挪动找到'/0',的地址 while (*pc++) { ; } //'/0'址减去起始地址 为字符串长度 return pc - str-1; } //利用递归的方式实现 int my_strlen(const char*str) { assert(str != NULL); if (*str == '\0') { return 0; } else return 1 + my_strlen(str + 1); } int main() { const char *p = "abcdef"; int ret = my_strlen(p); printf("%d\n",ret); system("pause"); return 0; } //模拟实现strlen
strcpy 函数原型: char * strcpy(char* strDestination, const char *strSource); 功能:实现把src所指向地址空间的内容拷贝到dest指针开始指向地址空间 ,遇到'/0'结束拷贝. #include<stdio.h> #include<assert.h> #include<stdlib.h> char* my_strcpy(char* dest,const char* str) { assert(str != NULL); assert(dest != NULL); char*p = str; while (*dest++ = *str++) { ; } } int main() { const char arr1[] = "abcdef"; char arr2[] = "aaaaaaaaaaa"; my_strcpy(arr2, arr1); printf("%s\n", arr2); system("pause"); return 0; }//strcay的模拟实现
strcat 函数原型: char * strcat(char* strDestination, const char *strSource); 功能:把src所指向的字符串追加到dest所指向字符串的后面; 实现:找到dest所指向字符串的’/0‘的地址,将src的内容追加到后面,知道src所指向的内容指向’/0‘结束; #include<stdio.h> #include<assert.h> #include<stdlib.h> char* my_strcat(char*dest,const char*str) { assert(str != NULL); assert(dest != NULL); while (*dest++) { //为了得到目标字符串的\0 ; } //dest现在指向的是\'0'后的一个空间,-1才能得到'\0'指向的空间 dest--; //把源赋给目标,为'\0'的时候跳出循环 while(*dest++ = *str++) { ; } } int main() { char arr1[] = "abcd"; char arr2[] = "efgh"; my_strcat(arr1, arr2); printf("%s\n", arr1); system("pause"); return 0; } //strcat的模拟实现
strstr函数原型: char * strstr(const char* strDestination, const char *strSource); 功能: 在dest所指向内容里面找子字符串src,找到返回子字符串起始地址 ,找不到 返回NULL; #include<stdio.h> #include<assert.h> #include<stdlib.h> int my_strstr(const char*str1, const char*str2) { assert(str1 != NULL); assert(str2 != NULL); const char*s1 = str1; const char*s2 = str2; const char*p = str1; while (*p != '\0') { //每次循环完了之后,给s1赋值p+1;保证s2和s1的第一个值进行比较 s1 = p; //保证s2每次比较都是首元素开始的 s2 = str2; while (*s1 == *s2) { s1++; s2++; } //跳出循环有两种情况1. s2不等于s1 2. s2比较完了 if (*s2 == '\0') { return p; } p++; } return NULL; } int main() { const char arr1[] = "abbbcdef"; const char arr2[] = "bcd"; char* ret = my_strstr(arr1, arr2); if (ret == NULL) { printf("NO\n"); } else { printf("%s\n", ret); } system("pause"); return 0; } //strstr 的模拟实现
srtcpmp函数原型: int strcat(const char* strDestination, const char *strSource); 比较规则: 两个字符串从左至右逐个比较,按ASC||的值比较;遇到'/0'结束; 目标和源相等返回0; 目标大于源返回一个正数; 目标小于源返回一个负数; #include<stdio.h> #include<assert.h> #include<stdlib.h> int my_strcmp(const char*str1, const char* str2) { assert(str1 != NULL); assert(str2 != NULL); const char*s1 = str1; const char*s2 = str2; //如果两个字符串的首字符相等,判断源是不是到'/0',如果不是继续向后面找,如果是返回0 while (*s1 == *s2) { if (*s1 == '\0') { return 0; } s1++; s2++; } //如果不相等,返回他们相减的结果 return *s1 - *s2; } int main() { const char*p1 = "abcdef"; const char*p2 = "abcdeef"; int ret = my_strcmp(p1, p2); printf("%d\n", ret); system("pause"); return 0; }
相关文章推荐
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- 模拟实现c库函数strcpy,strcat,strstr,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- strlen,strcpy,strncpy,strcmp,strcat,strstr的用法,函数原型及函数的实现
- 字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现
- C语言字符串函数详解(2) strcpy、strcmp、strcat、strlen、strstr
- strlen strcmp strcat strcpy strncpy strstr strchar函数的实现
- strcat,strcpy,strcmp,strlen4个常用字符串处理函数的数组与指针简单实现方法~
- C语言字符串函数详解 strcpy、strcmp、strcat、strlen、strstr
- 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()
- C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)
- 模拟实现C库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove
- C基础--字符串操作函数(strlen,strcpy,strcmp,strcat,strstr,strtok,strchr)
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现函数库中的常用函数,1实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove,8实现memset
- strlen, strcpy, strcat, strcmp, memset... (字符串操作函数的实现)