1.实现strcpy

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char* Strcpy(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	int i = 0;
	for (; src[i] != '\0'; ++i) {
		dest[i] = src[i];
	}
	dest[i] = '\0';
	return dest;
}

int main() {
	char* p = "abcdef";
	char str[1024] = { 0 };
	Strcpy(str, p);
	printf("%s\n", str);
	system("pause");
	return 0;
}

2.实现strcat

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

char* Strcat(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	int i = 0;
	for (; dest[i] != '\0'; ++i);
	for (int j = 0; src[j] != '\0'; ++i, ++j) {
		dest[i] = src[j];
	}
	dest[i] = '\0';
	return dest;
}

int main() {
	char str1[1024] = "aaa";
	char str2[1024] = "bbb";
	Strcat(str1, str2);
	printf("%s %s\n", str1, str2);
	system("pause");
	return 0;
}

3.实现strstr

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

const char* Strstr(const char* str1, const char* str2) {
	assert(str1 != NULL);
	assert(str2 != NULL);
	if (*str2 == '\0') {
		return NULL;
	}
	const char* black_ptr = str1;
	while (*black_ptr != '\0') {
		const char* red_ptr = black_ptr;
		const char* sub_ptr = str2;
		while (*red_ptr != '\0'
			&& *sub_ptr != '\0'
			&& *red_ptr == *sub_ptr) {
			++red_ptr;
			++sub_ptr;
		}
		if (sub_ptr == '\0') {
			return black_ptr;
		}
		++black_ptr;
	}
	return NULL;
}

int main() {
	char str1[] = "abcdef";
	char str2[] = "bcd";
	char* ret = strstr(str1, str2);
	printf("%p\n", str1);
	printf("%p\n", ret);
	system("pause");
	return 0;
}

4.实现strchr

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
	char str[] = "This is a sample string";
	char* pch;
	printf("Looking for the 's' character in \"%s\"...\n", str);
	pch = strchr(str, 's');
	while (pch != NULL) {
		printf("found at %d\n", pch - str + 1);
		pch = strchr(pch + 1, 's');
	}
	system("pause");
	return 0;
}

5.实现strcmp

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int Strcmp(const char* str1, const char* str2) {
	assert(str1 != NULL);
	assert(str2 != NULL);
	int i = 0;
	for (; str1[i] != '\0' && str2[i] != '\0'; ++i) {
		if (str1[i] > str2[i]) {
			return 1;
		}
		else if (str1[i] < str2[i]) {
			return -1;
		}
		else;
	}
	if (str1[i] > str2[i]) {
		return 1;
	}
	else if (str1[i] < str2[i]) {
		return -1;
	}else {
		return 0;
	}
}
int main() {
	char str1[1024] = "abab";
	char str2[1024] = "abab";
	int ret = Strcmp(str1, str2);
	if (ret < 0) {
		printf("str1 < str2");
	}
	else if (ret > 0) {
		printf("str1 > str2");
	}
	else {
		printf("str1 == str2");
	}
	system("pause");
	return 0;
}

**6.实现memcpy **

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void* Memcpy(void* dest, const void* src, size_t num) {
	assert(dest != NULL);
	assert(src != NULL);
	char* pdest = (char*)dest;
	const char* psrc = (const char*)src;
	for (size_t i = 0; i < num; ++i) {
		pdest[i] = psrc[i];
	}
	return dest;
}
int main() {
	int arr1[5] = { 0 };
	int arr2[5] = { 1,2,3,4,5 };
	Memcpy(arr1, arr2, 20);
	for(int i = 0; i < 5; ++i) {
		printf("%d\n", arr1[i]);
	}
	system("pause");
	return 0;
}

**7.实现memmove **

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

void* Memmove(void* dest, const void* src, size_t num) {
	assert(dest != NULL);
	assert(src != NULL);
	void* pdest = dest;
	if (dest <= src || (char*)dest >= ((char*)src + num)) {
		while (num--) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else {
		dest = (char*)dest + num - 1;
		src = (char*)src + num - 1;
		while (num--) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest - 1;
			src = (char*)src - 1;
		}
	}
	return dest;
}
int main() {
	int arr1[5] = { 0 };
	int arr2[5] = { 1,2,3,4,5};
	Memmove(arr1, arr2, 20);
	for (int i = 0; i < 5; ++i) {
		printf("%d\n", arr1[i]);
	}
	system("pause");
	return 0;
}