• str系列---字符串函数


    1、 strcat
      extern char *strcat(char *dest,char *src);

      把src所指字符串添加到dest结尾处(覆盖dest结尾处的'')并添加''。

      返回指向dest的指针。

    //将源字符串加const,表明其为输入参数
    char* strcat(char* strDest , const char*s trSrc)
    {
        //后文return address,故不能放在assert断言之后声明address
        char* address=strDest;
        assert( (strDest!=NULL)&&(strSrc!=NULL) );//对源地址和目的地址加非0断言
        while(*strDest)//是while(*strDest!=’’)的简化形式
        {
            //若使用while(*strDest++),则会出错,因为循环结束后strDest还会执行一次++,
            //那么strDest将指向''的下一个位置。/所以要在循环体内++;因为要是*strDest最后指
            //向该字符串的结束标志’’。
            strDest++;
        }
     
        while(*strDest++=*strSrc++)
        {
            NULL;//该循环条件内可以用++,
        }//此处可以加语句*strDest=’’;无必要
        return address;//为了实现链式操作,将目的地址返回
    }
    View Code


    2、 strchr

      char * strchr (const char *s,int c);

      找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。

    char*strchr(char *s,char c)
    {
        while(*s!=''&&*s!=c)
        {
        ++s;
        }
        return*s==c?s:NULL;
    }
        
    View Code

    3、 strrchr

      char *strrchr(const char *str, char c);

      查找一个字符c在另一个字符串str中末次出现的位置,然后将该字符出现的地址返回。

    4、 strcmp

      int strcmp(const char *s1,const char *s2);

      当s1<s2时,返回为负数;当s1=s2时,返回值= 0;当s1>s2时,返回正数

    /*strcmp function*/
    #include <string.h>
    int strcmp(const char *sl,const char *s2)
    {
        /*compare unsigned char sl[],s2[]*/
        for(;*sl==*s2;++sl,++s2)
            if(*sl=='')
                return(0);
        return((*(unsignedchar*)sl<*(unsignedchar*)s2)?-1:+1);
    }
    View Code


    5、 strcpy

      extern char *strcpy(char* dest, const char *src);

      把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

      返回指向dest的指针。

    /**********************
    *C语言标准库函数strcpy的一种典型的工业级的最简实现
    *返回值:目标串的地址。
    *对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
    *参数:des为目标字符串,source为原字符串
    */
    
    char* strcpy(char* des,const char* source)
    {
     char* r=des;
     while((*(des++)=*(source++))!='');
     return r;
    }
    
    /*while((*des++=*source++));的解释:赋值表达式返回左操作数,所以在赋值NULL后,循环停止*/
    View Code

    6、 strcasecmp

      int strcasecmp (const char *s1, const char *s2);

      用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。

    7、 strcspn

      size_t strcspn ( const char *s,const char * reject);

      从参数s字符串的开头计算连续的字符,而这些字符都完全不在参数reject所指的字符串中。

      返回字符串s开头连续不含字符串reject内的字符数目。

    8、 strdup

      extern char *strdup(char *s);

      strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。

      返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

    9、 strlen

      extern unsigned int strlen(char *s);

      计算字符串s的(unsigned int型)长度,不包括''在内

      返回s的长度,不包括结束符NULL。

    10、 strpbrk

      char *strpbrk(const char *cs,const char *ct);

      依次检验字符串s1中的字符,当被检验字符在字符串s2中也包含时,则停止检验,并返回该字符位置,空字符NULL不包括在内。

      返回s1中第一个满足条件的字符的指针,如果没有匹配字符则返回空指针NULL。

    char * strpbrk(const char * cs,const char * ct)
    {
        const char *sc1,*sc2;
        for( sc1 = cs; *sc1 != ''; ++sc1)
        {
            for( sc2 = ct; *sc2 != ''; ++sc2)
            {
                if (*sc1 == *sc2)
                {
                    return (char *) sc1;
                }
            }
        }
        return NULL;
    }
    View Code


    11、 strspn

      size_t strspn (const char *s,const char * accept);

      strspn()返回的数值为n,则代表字符串s 开头连续有n 个字符都是属于字符串accept内的字符。

    int strspn(const char *s,const char *accept)
    {
        const char *p;
        const char *a;
        int count = 0;
        for(p = s; *p != ''; ++p)
        {
            for (a = accept; *a != ''; ++a)
            {
                if (*p == *a)
                {
                    break;
                }
            }//里面的for循环到此为止
            if (*a == '')
            {
                return count;
            }
            ++count;
        }//外面的for循环到此为止
        return count;
    }
    View Code


    12、 strstr

      char *strstr(const char *haystack,const char *needle);

      strstr()会从字符串haystack 中搜寻字符串needle,并将第一次出现的地址返回;否则返回NULL。

    char *strstr(constchar*s1,constchar*s2)
    {
        int n;
        if(*s2)
        {
            while(*s1)
            {
                for(n=0;*(s1+n)==*(s2+n);n++)
                {
                    if(!*(s2+n+1))
                        return(char*)s1;
                }
                s1++;
            }
            return NULL;
        }
        else
            return (char*)s1;
    }
    View Code
    char *strstr(const char*s1,const char*s2)
    {
        const char*p=s1;
        const size_tlen=strlen(s2);
        for(;(p=strchr(p,*s2))!=0;p++)
        {
            if(strncmp(p,s2,len)==0)
                return (char*)p;
        }
        return(0);
    }
    View Code


    13、 strtok

      char * strtok(char *s,const char *delim);

      用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为''字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回下一个分割后的字符串指针。

      返回下一个分割后的字符串指针,如果已无从分割则返回NULL。

  • 相关阅读:
    网页背景音乐
    CSS 实现背景半透明
    实战中总结出来的CSS常见问题及解决办法
    AsyncTask的简单使用
    ORMLiteDatabase的简单使用并且与其他的表相互联系
    传递消息--第三方开源--EventBus的简单使用
    通过messenger实现activity与service的相互通信
    通过Messenger与后台连接(单向操作,activity向service发送数据)
    怎么做QQ、微信等消息气泡
    通过bind实现activity与service的交互
  • 原文地址:https://www.cnblogs.com/jiaoge/p/4363601.html
Copyright © 2020-2023  润新知