//string 系列的库函数的实现: 字符串=字符数组+'\0';
1 char* strcpy1( char *strDest, const char *strSrc);
2 char* strncpy1(char* strdest, const char* strsrc, int n);
3 int strcmp1(const char* str1, const char* str2);
4 int strlen1(const char* str); //还可以使用递归的思想
5 char* strstr1(const char* str1, const char* str2);
6 char *strcat1(char *strDest, const char *strSrc);
7 void *memcpy1(void *pvTo,const void *pvFrom,size_t size); //完成内存的拷贝


========================================================================================

1 char* strcpy1( char *strDest, const char *strSrc);

char* strcpy1(char *strDest, const char *strSrc )
{
    assert(strSrc!=NULL&&strDest!=NULL);
    char *str=strDest;
    //while(str!='\0')    while(str!=NULL)   犯得俩神棍一样的错误!!!  
    while(*strSrc!='\0')
    {
        *str++=*strSrc++;
    }
    *str='\0';             //最后加上字符串结束标志
    cout<<strDest<<endl;
    return strDest;
}



2 char* strncpy1(char* strdest, const char* strsrc, int n)

char* strncpy1(char* strdest, const char* strsrc, int n )
{
    assert(strdest!=NULL&&strsrc!=NULL);
    char* str=strdest;
    int num=0;
                                                                                                  
    while(*strsrc!='\0'&&num<n)
    {
        *str++=*strsrc++;
        num++;
    }
    if(num==n)
    {
        *str='\0';
        cout<<"拷贝成功了:"<<strdest<<endl;
        return strdest;
    }
    cout<<"拷贝失败!!!"<<endl;
    return NULL;
}




3 int strcmp1(const char* str1, const char* str2)

// 否定:比较每一个字符的值得大小---正数返回1,相等返回0,负数返回-1;
int strcmp1( const char* str1, const char* str2 )
{
    assert(str1!=NULL&&str2!=NULL);
    int res=0;
    //while(*s1==*s2){} res=*s1-*s2;
    while(!(res=(unsigned char*)*str1-(unsigned char*)*str2)&&(*str2))
    {
        str1++;
        str2++;
    }
    if(res>0)
    {
        cout<<1<<endl;
        return 1;
    }
    else if(res<0)
    {
        cout<<-1<<endl;
        return -1;
    }
    cout<<0<<endl;
    return 0;
}



4 int strlen1(const char* str)


int strlen1( const char* str )
{
    assert(str!=NULL);
    int num=0;
    const char *strtmp=str;    //char *strtmp=str; 出错
    while(*strtmp!='\0')
    {
        num++;
        strtmp++;
    }
    cout<<"The number is "<<num<<endl;
    return num;
}




5 char* strstr1(const char* str1, const char* str2)


char* strstr1( const char* str1, const char* str2 )
{
    assert(str1!=NULL&&str2!=NULL);
    //const char *p=str1,*p2=str2;
    char *p=(char*)str1,*p2=(char*)str2;
    char *tmp=NULL;              //tmp从第一个匹配的字符开始标志。
    while(*p!='\0')
    {
        if(*p==*p2)
        {
            tmp=p;
            while(*tmp==*p2&&*p2!='\0')
            {
                tmp++;
                p2++;
            }
            if(*p2=='\0')
            {
                cout<<"匹配:找到了"<<p<<endl;
                return p;
            }
        }
        p++;
    }
    cout<<"匹配失败!"<<endl;
    return NULL;
}



6 char *strcat1(char *strDest, const char *strSrc)

//1 找到strDest的最后位置  2 建立连接关系一一拷贝。
char * strcat1( char *strDest, const char *strSrc )
{
    /*assert(strDest!=NULL&&strSrc!=NULL);
    int lenDest,lenSrc;
    lenDest=strlen(strDest);
    lenstrlen(strSrc);
     for(int i=0;i<lenSrc;i++)
    {
    strDest[lenDest+i]=strSrc[i];
    }
    strDest[lenDest+lenSrc]='\0';
    cout<<strDest<<endl;
    return strDest;*/
    //第二种方法:
    assert(strDest!=NULL&&strSrc!=NULL);
    char *strP=strDest;
    while(*strP!='\0')
    {
        strP++;
    }
    //从最后的一个位置 进行复制。
    while(*strSrc!='\0')
    {
        *strP++=*strSrc++;
    }
    *strP='\0';
    cout<<strDest<<endl;
    return strDest;
}




7 void *memcpy1(void *pvTo,const void *pvFrom,size_t size); //完成内存的拷贝

注意:编译的时候出现错误!!

// //内存拷贝可以 拷贝任意数据类型的数据---转化为(byte*)
//void * memcpy1( void *pvTo,const void *pvFrom,size_t size )
//{
//  assert(pvTo!=NULL&&pvFrom!=NULL);
//  byte *memTo=(byte*)pvTo;
//  byte *memFrom=(byte*)pvFrom;
//
//  while(size>0)
//  {
//      *memTo++=*memFrom++;
//      size--;
//  }
//
//  return pvTo;
//}



测试代码:



char str1[100],str2[]="nihao haha";
    //strcpy1(str1,str2);
    strncpy1(str1,str2,8);
    /*char *s1="Hello, world!";
    char *s2="Hello, World!";
    strcmp1(s1,s2);*/
    //strlen1(str2);    //在函数外面可以是:len=sizeof(str)/sizeof(char);
    /*char *s1="Hello, world!";
    char *s2="world";
    strstr1(s1,s2);*/
    char string1[50]="Thanks ,thank you.";
    char *s="you are welcome.";
    strcat1(string1,s);