1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何用C语言实现各种字符函数和字符串函数strstr memcpy memmove strlen strcpy strcmp strcat

如何用C语言实现各种字符函数和字符串函数strstr memcpy memmove strlen strcpy strcmp strcat

时间:2020-09-29 21:34:03

相关推荐

如何用C语言实现各种字符函数和字符串函数strstr memcpy memmove strlen strcpy strcmp strcat

用C语言模拟实现字符函数与字符串函数 strstr、memcpy、memmove、strlen、strcpy、strcmp、strcat

若使用本文相关代码,还请动手点个赞!!!

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h> #include<string.h>//模拟实现strstr#if 1 //不使用本段代码时,请将1改为0char* my_strstr(const char* str1, const char* str2){//assert(str1 && str2);char* p1 = str1;char* p2 = str2;while (*str1 != '\0'){while (*str1 == *str2){str1++;str2++;if (*str2 == '\0'){return p1;}}p1 = str1;//str1向后走了一位str2 = p2;//重新开始比较if (*str1 != *str2)//新的str1与str2是否不同{p1=++str1;}}return NULL;}int main(){char arr1[] = "abbcdebbd";char arr2[] = "bc";//bdchar *p=my_strstr(arr1, arr2);printf("%s",p);}#endif//模拟实现memcpy#if 0//将0改为1即可使用本段代码void* my_memcpy(void* dest, const void* src, size_t count){void* p = dest;for (size_t i = 0; i < count; i++){*(((char*)dest) + i) = *(((char*)src) + i);}return p;}int main(){int arr[] = {1,2,3,4,5,6,7,8,9 };//my_memcpy(arr+3, arr, 12);//my_memcpy(arr , arr+3, 12);my_memcpy(arr + 2, arr+1, 12);}#endif//模拟实现memmove//void *memmove( void *dest, const void *src, size_t count );#if 0void* my_memmove(void* dest, const void* src, size_t count){void* p = dest;if ((char *)dest > (char *)src)//目标地址大于源地址从后向前{for (int i = (int)count-1; i >= 0; i--){*(((char*)dest) + i) = *(((char*)src) + i);}return p;}else if ((char*)dest < (char*)src)//目标地址小于源地址从前向后{for (size_t i = 0; i < count ; i++){*(((char*)dest)+i) = *(((char*)src) + i);}return p;}else//目标地址等于源地址 任意返回一个地址{return dest;}}int main(){int arr[] = {1,2,3,4,5,6,7,8,9 };//my_memmove(arr+3, arr, 12);//my_memmove(arr + 3, arr, 12);//my_memmove(arr + 1, arr, 12);//目标地址大于源地址从后向前my_memmove(arr + 3, arr + 4, 12);//目标地址小于源地址从前向后}#endif//模拟实现strlen#if 0int my_strlen(const char* arr){assert(arr);int count = 0;while (*arr){arr++count++;}return count;}void test(){char arr[] = "abcdef";int ret = my_strlen(arr);printf("%d ", ret);}int main(){test();return 0;}#endif//模拟实现strcpy#if 0char* my_strcpy(char* dest, const char* arr){char* p = dest;while (*dest++=*arr++){;}return p;}void test(){char arr[] = "abcdef";char dest[20] = {0 };printf("arr:%s\n", arr);printf("dest:%s\n", dest);my_strcpy(dest,arr);printf("dest:%s", dest);}int main(){test();return 0;}#endif //模拟实现strcmp#if 0int my_strcmp(const char* arr, const char* arr1){if (strlen(arr) != strlen(arr1)){return strlen(arr) - strlen(arr1);}else {while (*arr == *arr1){if (*arr == '\0'){return 0;}arr++;arr1++;}return (int)(*arr - *arr1);}}void test(){char arr [] = "abcdef";char arr1[] = "abcdef";char arr2[] = "abcdefg";char arr3[] = "qcdefg";int ret=my_strcmp(arr, arr1);printf("%d \n", ret);int ret1=my_strcmp(arr, arr2);printf("%d \n", ret1);int ret2 = my_strcmp(arr3, arr);printf("%d \n", ret2);}int main(){test();return 0;}#endif模拟实现strcat#if 0char* my_strcat(char* dest, const char* sour){assert(dest && sour);char* p = dest;char* p1 = sour;while (*dest){dest++;}while (*dest++ = *sour++){;}return p;}void test(){char arr[] = "efgh";char arr1[20] = "abcd";printf("拼接前:%s\n", arr1);my_strcat(arr1, arr);printf("拼接后:%s\n", arr1);printf("拼接后:%s\n", my_strcat(arr1, arr));}int main(){test();return 0;}#endif

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