1.實現strcpy 2.實現strcat 3.實現strstr 4.實現strchr 5.實現strcmp 6.實現memcpy 7.實現memmove
阿新 • • 發佈:2018-12-21
1.模擬實現strcpy函式拷貝字串
#include<stdio.h> #include<assert.h> char* my_strcpy(char* dest,const char *src) { char* ret = dest; assert(dest != NULL); assert(src != NULL); while(*dest++ = *src++) { ; } return ret; } int main() { char arr1[10] = "abcdef"; char arr2[10] = {0}; printf("%s\n",my_strcpy(arr2,arr1)); return 0; }
2.模擬實現strcat函式連線字串
#include<stdio.h> #include<assert.h> char* my_strcat(char* arr1,const char* arr2) { char *ret = arr1; assert(arr1 != NULL); assert(arr2 != NULL); while(*arr1 != '\0') { *arr1++; } while(*arr1++ = *arr2++) { ; } return ret; } int main() { char arr1[20] = "hello"; char arr2[20] = " bit"; printf("%s\n",my_strcat(arr1,arr2)); return 0; }
3.模擬實現strstr查詢字串
#include<stdio.h> #include<assert.h> char* my_strstr(const char*str1,const char*str2) { const char *s1 = str1; const char *s2 = str2; const char *cp = str1; assert(str1 != NULL); assert(str2 != NULL); if(*str2 == '\0') return (char*)str1; while(*cp) { s1 = cp; s2 = str2; while(*s1 && *s2 && *s1 == *s2) { s1++; s2++; } if(*s2 == '\0') return (char *)cp; cp++; } return NULL; } int main() { char *p1 = "bbc"; char *p2 = "abbcdef"; char *ret = my_strstr(p2,p1); printf("%s\n",ret); return 0; }
4.模擬實現strchr,含義是查詢字串s中首次出現c的位置。
#include<stdio.h>
char* my_strchr(char* s,char c)
{
while(*s != '\0' && *s != 'c')
{
s++;
}
return *s == c?s:NULL;
}
int main()
{
char* arr = "abcdefg";
int ret = my_strchr(arr,'c');
printf("%s\n",ret);
return 0;
}
5.模擬實現strcmp函式比較兩個字串的大小
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1,const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
while(*str1 == *str2)
{
if(*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
int ret = my_strcmp("abcdef","abc");
printf("%d",ret);
}
6.模擬實現memcpy拷貝記憶體
拷貝的是位元組數
#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest,void* src ,int count)
{
void* ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(count--)
{
*(char*)dest = *(char*)src;
((char*)dest)++;
((char*)src)++;
}
return ret;
}
int main()
{
int arr1[] = {1,2,3,4,5,6};
int arr2[20] = {0};
my_memcpy(arr2,arr1,12);
return 0;
}
7.實現memmove在一個記憶體中進行拷貝
#include<stdio.h>
#include<assert.h>
void* my_memmove(void* dest,void* src,int count)
{
void* ret = dest;
assert(dest);
assert(src);
if(dest<src)
{
while(count--)
{
*((char*) dest) =*((char*) src);
((char*) dest)++;
((char*) src)++;
}
}
else
{
while(count--)
{
*((char*) dest+count) = *((char*) src+count);
}
}
return ret;
}
int main()
{
int arr1[] = {1,2,3,4,5,6,7};
my_memmove(arr1,arr1+2,16);
return 0;
}