模擬實現strcmp、strstr、memcpy、memmove

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <assert.h>
#include <windows.h>  
#include <stdlib.h>

#模擬實現memmove函數
void *my_memmove(void *dest,const void *src,size_t count)  
{  

 void *ret = dest;  
 assert(dest);  
 assert(src);  
 if((src<dest)&&((char*)dest<(char*)src+count))  
 {  
  while(count--)  
  {  
   *((char*)dest+count)=*((char*)src+count);  
  }  
 }  
 else  
 {  
  while(count--)  
  {  
   *(char*)dest=*(char*)src;  
   dest=(char*)dest+1;  
   src=(char*)src+1;  
  }  
 }  
 return ret;  
}  
int main()  
{  
 int i=0;  
 int arr[]={1,2,3,4,5,6,7,8,9,0};  
 int sz=sizeof(arr)/sizeof(arr[0]);  
    my_memmove(arr+3,arr,4*sizeof(int));  
    for(i=0;i<sz;i++)  
 {  
  printf("%d ",arr[i]);  
 }    
 return 0;  
}  

#模擬實現memcpy函數
void* my_memcpy(void* dest, const void* src,size_t count)  
{  
 void *ret = dest;  
 assert(dest);  
 assert(src);  
 while(count)  
 {  
  *(char *)dest = *(char *)src;  
  dest = (char *)dest+1;  
  src = (char *)src+1;  
  count--;  
 }  
 return ret;  
}  
int main()  
{  
 char arr[] = {"hello"};  
 char str[] = {"bit"};  
 int sz = sizeof(arr)/sizeof(arr[0]);  
 int i=0;  
 char *ret=my_memcpy(arr,str,7);  
 printf("%s\n",ret);  
 return 0;  
} 

#模擬實現strstr函數 
char *my_strstr(const char *str, char *string)
{
    int i=0;
    assert(str&&string);   
    while('\0'!=str)       
    { 
      while(1)
      {
        if(string[i]!=str[i])   
          break;
        if(string[i]=='\0')      
          return str;
        i++;
      }
      string++;
    }
    return NULL;
}

int main()
{
   char string[] = "bcde";
   char str[] = "abcdef"; 
   char *p=my_strstr(str,string);
   int result=p-str+1;    
   if(p!=NULL)  
       printf("%s found at position %d\n\n", string,result);
    else
       printf( "%s not found\n", string);
    return 0;
}


#模擬實現strcmp函數

int my_strcmp(const char *str1, const char *str2)  
{  
    assert(str1);  
    assert(str2);  
    while (*(str1) == *(str2))  
    {  
        if (*str1 == '\0')  
            return 0; 
        str1++;  
        str2++;  
    } 
    return *str1 - *str2;

}  
int main()  
{  
    char *p1 = "ab";  
    char *p2 = "abcd";       
    printf("%d\n", my_strcmp(p1, p2));                
    return 0;  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章