#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<windows.h>
1.实现strcpy
char*strcpy(char* dest, const char* src){
assert((dest != NULL) && (src != NULL));
while (*src != '\0'){
*dest++ = *src++;
}
* dest == * src;
return dest;
}
int main(){
char str1[100] = "123";
const char str2[100] = "I love you";
strcpy(str1, str2);
printf("%s\n", str1);
system("pause");
return 0;
}
2.实现strcat
char*strcat(char*dest, const char*src){
assert((dest != NULL) && (src != NULL));
char*p = dest;
while (*p != '\0'){
++p;
}
while (*src != '\0'){
*p++ = *src++;
}
*p == *src;
return dest;
}
int main(){
char str1[100] = "123";
char str2[100] = "I love you";
strcat(str2, str1);
printf("%s\n", str2);
system("pause");
return 0;
}
3.实现strstr
char* strstr(const char*dest, const char*src){
char* start = (char*)dest;
char* substart = (char*)src;
char*cp = (char*)dest;
assert((dest != NULL) && (src != NULL));
while (*cp){
start = cp;
while (*start != '\0'&&*substart != '\0'&&*start == *substart){
start++;
substart++;
}
if (*substart == '\0'){
return cp;
}
substart = (char*)src;
cp++;
}
return NULL;
}
int main(){
char str1[100] = "I hate you";
char str2[100] = "I love you";
printf("%s\n", strstr(str2, str1));
system("pause");
return 0;
}
4.实现strchr
char* Strchr(const char* str1, int c){
if (str1 != NULL||c != 0){
return NULL;
}
const char* p = str1;
while (*p != '\0'){
if (*p == c){
return (char *)p;
}
++p;
}
return NULL;
}
int main(){
char str1[] = "abcdecde";
int c = 'c';
char* ret = strchr(str1, c);
if (ret == NULL){
printf("没找到\n");
}else{
printf("%d\n", *ret);
}
return 0;
}
5.实现strcmp
int strcmp(const char*arr1, const char*arr2){
while( (*arr1 != '\0') && (*arr2 != '\0')){
if (*arr1 > *arr2){
return 1;
}
else if(*arr1<*arr2){
return -1;
}
else{
++arr1;
++arr2;
}
}
if ((*arr1 == '\0') && (*arr2 != '\0')){
return -1;
}
else if ((*arr2 == '\0') && (*arr1 != '\0')){
return 1;
}
else{
return 0;
}
}
int main(){
char arr1[] = "welcome to xi'an";
char arr2[] = "welcome to shanghai";
int ret=strcmp(arr1, arr2);
printf("%d\n", ret);
system("pause");
return 0;
}
6.实现memcpy
void*memcpy(void*dest, void*src, size_t num){
assert((dest != NULL) && (src != NULL));
char*p = (char*)dest + (num - 1);
const char*p1 = (char*)src + (num - 1);
while (num--){
*p = *p1;
--p;
--p1;
}
return dest;
}
int main(){
char arr1[] = "welcome";
char arr2[] = "goodbey";
memcpy(arr2, arr1, 3);
printf("%s\n", arr2);
system("pause");
return 0;
}
7.实现memmove
void*memmove(void*dest, void*src, size_t num){
assert((dest != NULL) && (src != NULL));
char* pdest = (char*)dest;
char* psrc = (char*)src;
if ((pdest >= psrc)&& (pdest <= psrc + num)){
for (size_t i = 0; i < num; ++i){
pdest = pdest + num - 1;
psrc = psrc + num - 1;
*pdest = *psrc;
--pdest;
--psrc;
}
}else{
for (size_t i = 0; i < num; ++i){
*pdest = *psrc;
++pdest;
++psrc;
}
}
return dest;
}
int main(){
char arr1[] = "welcome";
char arr2[] = "goodbey";
memmove(arr2, arr1, 2);
printf("%s\n", arr2);
system("pause");
return 0;
}