一些字符串操作函数的模拟实现

来源:互联网 发布:小阴唇肥大 知乎 编辑:程序博客网 时间:2024/05/29 16:18

下面我们模拟实现一下几个字符串操作的函数。

模拟实现strncpy:

#include<stdio.h>#include<assert.h>#include<stdlib.h>char *my_strncpy(char *dest, char *src, size_t n){assert(dest != NULL);assert(src != NULL);char *p = dest;while (n){*dest = *src;dest++;src++;n--;}return p;}int main(void){char buf1[100] = "heelo";char buf2[100] = "world";printf("%s\n", my_strncpy(buf2, buf1, 4));system("pause");return 0;}
模拟实现strncmp:

#include<stdio.h>#include<assert.h>#include<stdlib.h>int my_strncmp(const char *dest, const char *src, size_t count){assert(dest != NULL);assert(src != NULL);while (count--){if ((*dest - *src) > 0){return 1;}else if ((*dest - *src) < 0){return -1;}else{;}*dest++;*src++;}return 0;}int main(){char arr[] = "zhangsan";char arr1[] = "zhangsi";int ret = my_strncmp(arr, arr1, 8);printf("ret = %d", ret);system("pause");return 0;}
模拟实现strncat:


#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>char* my_strncat(char *dest, const char *src,size_t count){assert(dest != NULL);assert(src != NULL);char *tmp = dest;while (*dest != '\0'){*dest++;}while (count && (*dest++ = *src++)){if (*src == '\0'){*dest = *src;break;}else{count--;}}return tmp;}int main(){char arr[20] = "hello";char arr1[] = "world";char *tmp = my_strncat(arr, arr1, 2);printf("%s\n", tmp);printf("%d", strlen(tmp));//测试下有没有把\0连接到arr里system("pause");return 0;}

模拟实现strstr:

#include<stdio.h>#include<stdlib.h>char* my_strstr(const char *dest, const char *src){const char *cp = dest;const char *p = src;const char *start = NULL;while(*cp){start = cp;while(*cp && *p && *cp == *p){cp++;p++;}if(*p == '\0'){return (char *)start;}cp = start+1;p = src;}return NULL;}int main(){char arr[] = "abcdefgbcd";char arr1[] = "bcd";char *tmp = my_strstr(arr, arr1);if(tmp == NULL){printf("没找到\n");}elseprintf("%s",tmp);system("pause");return 0;}
模拟实现strrstr:

#include<stdio.h>#include<stdlib.h>#include<assert.h>char* my_strstr(const char *dest, const char *src){const char *cp = dest;const char *p = src;const char *start = NULL;while(*cp){start = cp;while(*cp && *p && *cp == *p){cp++;p++;}if(*p == '\0'){return (char *)start;}cp = start+1;p = src;}return NULL;}char* my_strrstr(const char *dest, const char *src){char *p = NULL;assert(dest != NULL);assert(src != NULL);while (*dest){if (my_strstr(dest, src)){p = my_strstr(dest, src);dest = p + 1;}else{return p;}}return p;}int main(){char arr[] = "abcdefgbcd";char arr1[] = "bcd";char *cp = my_strstr(arr, arr1);char *p = my_strrstr(arr, arr1);if (cp == NULL){printf("没找到\n");}elseprintf("%s\n", cp);if (p == NULL){printf("没找到\n");}elseprintf("%s\n", p);system("pause");return 0;}
模拟实现strchr:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>#include<assert.h>char *my_strchr(char *str, int key){assert(str != NULL);while (*str != '\0'){if (*str == key){return str;}str++;}return NULL;}int main(){char arr[] = "hello world!";int n = 0;printf("请输入你要查找的字符:");scanf("%c", &n);char* ret = my_strchr(arr, n);printf("%s\n", ret);return 0;}

模拟实现strrchr:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>char *my_strrchr(char *str, int key){assert(str != NULL);char * ret = 0;while (*str != '\0'){if (*str == key){ret = str;}str++;}if (ret != 0){return ret;}elsereturn NULL;}int main(){char arr[] = "hello world";int n = 0;printf("请输入你要查找的字符:");scanf("%c", &n);char *ret = my_strrchr(arr, n);printf("%s\n", ret);return 0;}





原创粉丝点击