1. 程式人生 > >字串操作函式的模擬實現(求大佬指教)

字串操作函式的模擬實現(求大佬指教)

以下僅是自己實現的程式碼,當然裡面存在一些問題。望各位大佬能指點一二,指出其中指標使用不當之處,並指導const的用法。


#include <stdio.h>
#include <string.h>

char* my_strcpy(char dest[], char* souce)
{
	char* d = dest;
	char* s = souce;
	while (*s != '\0')
	{
		*d = *s;
		d++;
		s++;
	}
	return d;
}

char* my_strcat(char* arr,char* cat,int sz)
{
	char *c = cat;
	char *a = &arr[sz];
	while (*c != '\0')
	{
		*a = *c;
		a++;
		c++;
	}
	return a;
}

char* my_strstr(char* tatol, char* arr, int sz)
{
	char* t = tatol;
	char* a = arr;
	while (*t != '\0')
	{
		if (*t == *a)
		{
			t++;
			a++;
			if (*a == '\0')
				return t - sz;
		}
		else
		{
			t++;
		}
	}
	return NULL;
}

char* my_strchr(char* tatol, char c)
{
	char* t = tatol;
	char* pc = &c;
	while (*pc != *t)
	{
		t++;
	}
	if (*pc == *t)
	{
		return pc;
	}
	else
		return NULL;
}

int my_strcmp(char* tatol, char* arr)
{
	while ((*tatol != '\0') || (*arr != '\0'))
	{
		if (*tatol == *arr)
		{
			tatol++;
			arr++;
		}
		else if (*tatol < *arr)
		{
			return -1;
		}
		else
		{
			return 1;
		}
	}
	return 0;
}

char* my_memcpy(char* dest, char* souce, int n )
{
	int i = 0;
	char* d = dest;
	char* s = souce;
	for (i=0; i<5; i++)
	{
		while (*s != '\0')
		{
			*d = *s;
			d++;
			s++;
		}
	}
	return d;
}

int main()
{
	char tatol[128] = "penta kill";
	char arr[128] = "penta";
	char str[128] = { 0 };
	char cat[128] = " kill";
	char c = 't';
	int sz = strlen(arr);
	
	my_strcpy(str, arr);
	printf("%s\n", str);
	my_strcat(arr, cat, sz);
	printf("%s\n", arr);
	printf("%p\n", my_strstr(tatol, arr, sz));
	printf("%p\n", my_strchr(tatol, c));
	printf("%d\n", my_strcmp(tatol, arr));
	printf("%s\n", my_memcpy(str, tatol, 5));

	return 0;
}