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