zoukankan      html  css  js  c++  java
  • 【转】 c语言string类函数实现汇总

    strcpy 函数 ,作用是将一个字符串的字符复制到另一个字符串中

    char * strcpy(char *destination ,const char * source)

    {

       while(*destination++=*source++);//看这一句话写的,精炼间断而又让人一目了然

       //我用while写肯定是要三条语句,循环变量,赋值,递增,唉。。。这就是菜鸟啊

       return(destination-1);

    }

    strcat函数,作用是将一个串的内容追加到另一个串上

    char *strcat(char *target,const char * source)

    {

       char *original=target;

       while(*target)//这里可以看出指针和数组下标的不同,一直都觉得指针式很有优势的

       target++;

       while(*target++=*source++);

       return(original);//注意到与上面一个函数返回的不同

    }

    strncat函数,这个不常用,作用是给字符串追加了N个字符

    char *strcat(char *destination ,const char * source,int n)

    {

       char *original=destination;

       int i=0;

       while(*destination )

       destination ++;

       while((i++<n)&&(*destination ++=*source++));//我忍不住再一次赞叹一下这个循环语句

       //这个容错性的想到也很牛,只要n为负数,就将目标字符串改为空

       if(i>n)

         *destination=NULL;

       return(original);

    }

    strlwr 和 strupr函数 这两个函数实现起来比较简单,就不列了 :)

    str_index函数 作用是返回索引到串的首次出现

    int str_index(const char*string, char letter)

    {

       char *original=string;

       while((*string!=letter)&&(*string))

             string++;

       return(string-original);//这个返回方法,没有一定功力估计很难想出来,至少脑子里不会首先会想到这样写

    }

    strrchr函数 也是不常用的函数 作用是搜索字符在字符串中的末次出现

    char *strrchr(const char *string, char letter)

    {

          char *ptr=NULL;

          while(*string)//这个逻辑在很多地方都有用

          {

              if(*string==letter)

                     ptr=string;

                     string++;

         }

         return (ptr);

    }

    strchr函数 作用是获取字符串中第一次出现某个字符

    char *strchr(const char *string, char letter)

    {

          while((*string!=letter)&&(*string))

                     string++;

         return (string);

    }

    strr_index函数 作用是返回指向字符串末次出现的索引

    int strr_index(const char *string,char letter)

    {

         char *original=string;

         char *ptr=NULL;

         while(*string)

        {

            if(*string==letter)

                 ptr=string;

                 string++

        }

        return((*ptr)?ptr-original:string-original);//要么返回末次出现的索引,要么返回字符串的长度

    }

    charcnt函数 作用是计算字符串中字符出现的次数

    int charcnt(const char *string,char letter)

    {

        int count=0;

        while(*string)

            if(*string==letter)

                count++;

            return(count);

    }

    strrev函数 作用是将字符串内容反转

    char *strrev(char *string)

    {

         char *original=string;

         char *forward=string;

         char tmp;

         while(*string)

             string++;

         while(forward<string)//逻辑和交换两个数差不多

         {

               temp=*(--string);

               *string=*forward;

               *forward++=tmp;

         }

         return(original);

    }

    strset函数 作用是将某特定字符赋给字符串 相当于用某一个字符重置字符串 不是很难的函数 :)

    strcmp函数 作用是比较两个字符串 相同返回0,第一个大返回-1 ,第二个大返回1

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

    {

        while((*s1==*s2)&&(*s1))//这个比较的方式很简练吧,也很有逻辑

        {

              s1++;

              s2++;

        }

        if((*s1==*s2)&&(!*s1))

             return(0);

        else if((*s1)&&(!*s2))

             return(-1);

        else if((!*s1)&&(*s2))

             return(1);

        else

            return((*s1>*s2)?-1:1);

    }

    strncmp函数 作用是比较两个字符串的前N个字符 实现和上面的函数很类似 只是要添加一个控制变量控制下长度 : )

    strdup函数  作用是复制字符串的内容

    strdup(const char *s1)

    {

        char *ptr;

        if((ptr=malloc(strlen(s1)+1)))

              strcpy(ptr,s1);

        return(ptr);

    }

    strspn函数 作用是从给定字符序列中查找字符的首次出现

    size_t strspn(const char *s1, const char *s2)//这个函数我看了很久才明白是什么意思,比如第一个参数传abcDef,第二个传cbA,                                                                  //按照顺序查找第一个字符串,可以找到第一个没有在第二个字符串中出现的字符是'D'

                                                                    //返回这个字符在第一个字符串中的索引,也就是3,另外,为什么不用int而用size_t做

                                                                    //返回值,是因为site_t是unsigned int,也就是正数

    {

         int i,j;

         for(i=0;*s1;i++,s1++)

         {

              for(j=0; s2[j]; j++)

                   if(*s1==s2[j])

                         break;

              if(s2[j]==NULL)

                   break;

         }

         return(i);

    }

    strstr函数 作用是在字符串中查找子字符串 虽然返回值是char* 但是这个函数应该在判断有没有找到子字符串情况下用的多些

    char * strstr(const char *s1,const char *s2)

    {

             int  i,j,k;

             for(i=0; s1[i]; i++)

                 for(j=i,k=0; s1[j]==s2[k]; j++,k++)

                       if(!s2[k+1])

                           return(s1+i)

             return(NULL);

    }

    strstr_cnt函数 作用是计算字符串出现的次数 实现差不多是strstr 和cnt的组合 : )

    substring_index函数 作用是给子字符串获取索引 只要将strstr的返回值改成i就可以了 : )

    r_strstr函数 作用是获取子字符串最右端出现 和strstr差不多 然后参照一般的查找最右端的函数 : )

    strstr_rem函数 作用是从字符串中删除子字符串

    char * strstr_rem(char *string, char *substring)//我没有仔细看这个函数,我有点懒,嘿嘿,但是按照上面的strstr在找到字符串后进行

                                                                       //进行替换,具体过程没看 列出来 可以学习

    {

           int  i,j,k,loc=-1;

             for(i=0; string[i]&&(loc==-1); i++)

                 for(j=i,k=0; string[j]==substring[k]; j++,k++)

                       if(!substring[k+1])

                           loc=i;

            if(loc!=-1)

             {

                     for(k=0; substr[k];k++);

                     for(j=loc;i=loc+k,string[i]; j++, i++)

                             string[j]=string[i];

                      string[i]=NULL;

             }

            return(string)

    }

    strstr_rep函数 作用是用另一个字符串代替子字符串

    char *strstr_rep(char *source, char *old , char *new)

    {

         char *original=source;

         char temp[256];

         int old_length=strlen(old);

         int  i,j,k,location=-1;

             for(i=0; source[i]&&(location==-1); i++)

                 for(j=i,k=0; source[j]==old [k]; j++,k++)

                       if(!old [k+1])

                           location=i;

          if(location!=-1)

          {

               for(j=0;j<location;j++)

                      temp[j]=source[j];

               for(i=0;new[i];i++,j++)

                      temp[j]=new[i];

               for(k=location+old_length;source[k];k++,j++)

                       temp[j]=source[k];

               temp[j]=NULL;

              for(i=0; source[i]=temp[i];i++);

          }

          return(original);

  • 相关阅读:
    Java五
    Java I/O流
    第二周学习笔记
    第一周学习笔记
    第六次作业修改版
    第六周作业
    java第四次作业(补)
    java第五次作业
    Java第三次作业
    java第二次作业
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2422397.html
Copyright © 2011-2022 走看看