1、实现strlen()函数的三种方式
(1)计数器方式
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> int my_strlen(char *str) { int count = 0; while (*str) { str++; count++; } return count; } int main() { char str[] = "abcdef"; printf("%d\n", my_strlen(str)); system("pause"); return 0; }
(2)递归方式
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> int my_strlen(char *str) { if (*str == '\0') return 0; else return 1 + my_strlen(str + 1); } int main() { char str[] = "abcdef"; printf("%d\n", my_strlen(str)); system("pause"); return 0; }
(3)指针-指针的方法
两指针相减规则详见指针(上)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> int my_strlen(char *str) { char *pdest = str; while (*pdest) { pdest++; } return pdest - str; } int main() { char str[] = "abcdef"; printf("%d\n", my_strlen(str)); system("pause"); return 0; }
2、C语言实现strcpy()函数
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> char *my_strcpy(char *pdest, char *pstr) { assert(pdest); assert(pstr); char *start = pdest; while (*pdest++ = *pstr++) { ; } return start; } int main() { char str1[] = "abcdef"; char str2[30] = { 0 }; printf("%s\n", my_strcpy(str2, str1)); system("pause"); return 0; }
3、C语言实现strcat()函数
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> char *my_strcat(char *start, char *end) { assert(start); assert(end); char *pdest = start; while (*start) { start++; } while (*start++ = *end++) { ; } *start = *end; return pdest; } int main() { char str1[30] = "ancdef"; char str2[] = "aaaaa"; printf("%s\n", my_strcat(str1, str2)); system("pause"); return 0; }
4、C语言实现strstr()函数
#pragma warning(disable:4996) #include<stdio.h> #include<stdlib.h> #include<assert.h> char *my_strstr(const char *str,const char *sub_str) { assert(str); if (*sub_str == '\0') { return NULL; } //char *cp = (char *)str; //char *sub_cp = (char *)sub_str; const char *cp = str; const char *sub_cp = sub_str; while (*str) { sub_str = sub_cp; str = cp; while (*str && *sub_str && *str == *sub_str) { str++; sub_str++; } if (*sub_str == '\0') { return cp; } else if (*str == '\0') return NULL; cp++; } return NULL; } int main() { char str1[] = "abcdef1234"; char str2[] = "abc"; char *ret = my_strstr(str1, str2); if (ret) printf("%s\n", ret); else printf("NULL\n"); system("pause"); return 0; }
5、C语言实现strchr()函数
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> #include<string.h> char *my_strchr(const char *psrc, char ch) { assert(psrc); while (*psrc) { if (*psrc == ch) { return psrc; } else psrc++; } return NULL; } int main() { char arr[] = "abcdeg"; char ch = 'b'; const char *ret = my_strchr(arr, ch); printf("%s\n", ret); system("pause"); return 0; }
6、C语言实现strcmp()函数三种方式
(1)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> int my_strcmp(char *str1, char *str2) { assert(str1); assert(str2); while (*str1 || *str2) { if (*str1 > *str2) { return 1; } else if (*str1 < *str2) { return -1; } else { str1++; str2++; } } return 0; } int main() { char str1[] = "bcd"; char str2[] = "abcde"; int num = my_strcmp(str1, str2); printf("%d\n", num); system("pause"); return 0; }
(2)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include<assert.h> int my_strcmp(char *str1, char *str2) { int ret = 0; while (!(ret = *(unsigned char*)str1 - *(unsigned char *)str2) && *str2 ) { str1++; str2++; } if (ret < 0) return -1; else if (ret>0) return 1; return ret; //最后一个字符相等且至少有个为\0 } int main() { char str1[] = "abcde"; char str2[] = "abcd"; printf("%d\n", my_strcmp(str1, str2)); system("pause"); return 0; }
(3)
#pragma warning(disable:4996) #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strcmp(const char *str1, const char *str2) { assert(str1); assert(str2); while (*str1 && *str2 && *str1 == *str2) { str1++; str2++; if (*str1 > *str2) return 1; else if(*str1 < *str2) return -1; } if (*str1 == '\0' && *str2!='\0') return -1; else if (*str2 == '\0' && *str2 != '\0') return 1; else return 0; } int main() { char str1[] = "abce"; char str2[] = "abae"; printf("%d\n", my_strcmp(str1, str2)); system("pause"); return 0; }