1.实现strcpy (把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间)
2.实现strcat (把src字符串接到dest字符串的后面)
3.实现strstr (判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。)
4.实现strchr (可以查找字符串s中首次出现字符c的位置)
5.实现strcmp (判断两个字符串dst和src是否相同,相同返回0 ,dst大于src返回-1,小于返回1)
6.实现memcpy (从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。)
7.实现memmove (从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。(可重叠))
8.实现strlen(字符串或数组长度)
#include<stdio.h>
#include<assert.h>
int my_strlen(char *q)
{
char *ret = q;
assert(q != NULL);
while(*q != '\0')
q++;
return q-ret;
}
char *my_strcpy(char *dest, const char*src)
{
char*p = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest++ = *src++)
{
;
}
return p;
}
char *my_strcat(char *dest, const char *src)
{
char *p = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
dest++;
while(*dest++ = *src++)
{
;
}
return p;
}
char *my_strstr(const char *str1, const char *str2)
{
char *p = (char*)str1;
assert(str1);
assert(str2);
if(*str2 == '\0')
return NULL;
while(*p)
{
char *q = (char*)str2; //初始化q令q指向str2首地址
char *s1 = p; //初始化s1令s1指向p
while(*p && *q && (*s1 == *q))
{
s1++;
q++;
}
if(*q =='\0')//判断是否结束的条件
return p;
p++;
}
return NULL;
}
char *my_strchr( char *dest, char c)
{
while(*dest != '\0' && *dest != c)
{
dest++;
}
if(*dest == c)
return dest;
else
return NULL;
}
int my_strcmp( const char *src,const char *dst)
{
int ret = 0;
assert(dst != NULL);
assert(src != NULL);
while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
{
src++;
dst++;
}
if(ret < 0)
ret = -1;
else if(ret > 0)
ret = 1;
return ret;
}
void *my_memcpy(void *dst, const void *src, size_t count)
{
void *ret = dst;
assert(dst != NULL);
assert(src != NULL);
while(count--){
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}
void *my_memmove(void *dst, const void *src, size_t count)
{
void *ret = dst;
assert(dst != NULL);
assert(src != NULL);
if(dst<src)
while(count--){
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
else
while(count--){
*((char*)dst + count)= *((char*)src + count);
}
return ret;
}
int main()
{
char arr1[20] = "abcdefg";
char arr2[] = "higklmn";
char arr3[] = "cde";
char arr4[] = "opqrstu";
int arr5[7] = {1,2,3,4,5,6,7};
int arr6[7] = {10,11,12,13,14,15,16};
char a = 'b';
int ret = 0;
int i = 0;
ret = my_strlen(arr1);
printf("%d\n",ret);
printf("%s\n",my_strchr(arr1,a));
printf("%d\n",my_strcmp(arr1,arr2));
printf("%s\n",my_strstr(arr1,arr3));
printf("%s\n",my_strcpy(arr1,arr4));
printf("%s\n",my_strcat(arr1,arr2));
my_memcpy(arr5,arr6,16);
for(i=0; i<7; i++)
printf("%d ",arr5[i]);
printf("\n");
my_memmove(arr6+2,arr6,16);
for(i=0; i<7; i++)
printf("%d ",arr6[i]);
printf("\n");
return 0;
}