1. 程式人生 > >1.實現strcpy 2.實現strcat 3.實現strstr 4.實現strchr 5.實現strcmp 6.實現memcpy 7.實現memmove

1.實現strcpy 2.實現strcat 3.實現strstr 4.實現strchr 5.實現strcmp 6.實現memcpy 7.實現memmove

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;
}