程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 字符串的庫函數的實現

字符串的庫函數的實現

編輯:關於C語言

//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);


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved