• 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()


    1.strlen()函数是求解字符串的有效长度的

    1)非递归实现

    size_t my_strlen(const char *str)

    {

         assert(str != NULL);  //断言,保证指针参数不能为空

         size_t count = 0;

         const char *pstr = str;   //参数保护

         while (*pstr++ != '')

        {

             count++;

        }

        return count;

    }

    2)非递归实现

    size_t my_strlen(const char *str)

    {

         assert(str != NULL);  //断言,保证指针参数不能为空

         const char *pstr = str;   //参数保护

        if (*str == NULL)

             return 0;

        else

             return my_strlen(str + 1) + 1;

    }

    2.strcat()字符串连接函数

    char* my_strcat(char *str1,const char* str2)

    {

         assert(str1 != NULL&&str2!=NULL);  

         char *pstr1 = str1;   

         const char* pstr2 = str2;

         while(*pstr1 != '')

       {

            pstr1++;

       }

         while (*pstr2!= '')

      {

          *pstr1++ = *pstr2++;

       }

      *pstr1 = '';

      return str1;

    }

    3.strcpy()字符串拷贝函数

    char* my_strcpy(char *str1,const char* str2)

    {

        assert(str1 != NULL&&str2!=NULL);

        char *pstr1 = str1;  

        const char* pstr2 = str2;

        while (*pstr2!= '')

       {

           *pstr1++ = *pstr2++;

       }

       *pstr1 = '';

       return str1;

    }

    4.strcmp()字符串比较函数

    int my_strcmp(const char *str1,const char* str2)

    {

          assert(str1 != NULL&&str2!=NULL);

          const char *pstr1 = str1;  

          const char* pstr2 = str2;

          while (*pstr2!= ''&&*pstr2!='')

         {

              if (*pstr1 > *pstr2)

                   return 1;

              else if (*pstr1 < *pstr2)

                   return -1;

                  pstr1++;

                  pstr2++;

         }

         while (*pstr1 != ''&&*pstr2 == '')

               return 1;

         while (*pstr1 == ''&&*pstr2 != '')

               return -1;

    return 0;

    }

    以上函数虽然可以实现字符串的拷贝函数,但是能不能做的更好呢?下面给出另一种实现方法:

    int my_strcmp(const char *str1,const char* str2)

    {

           assert(str1 != NULL&&str2!=NULL);

           const char *pstr1 = str1;  

           const char* pstr2 = str2;

           int result = 0;

           while (*pstr2!= ''||*pstr2!='')

          {

                result = *pstr1 - *pstr2;

                if (result != 0)

                      break;

                 pstr1++;

                 pstr2++;

          }

           if (result>0)

                 return 1;

           else if (result<0)

                 return -1;

    return result;

    }

  • 相关阅读:
    多环境
    Date的after()与before()方法的使用
    Centos6.8 yum报错及修复YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. Invalid
    JSON格式数据解析看这一个就足够了
    widnows下lua开发环境luadist LuaRocks搭建
    树的相关定义及遍历
    win10 启动redis服务的bat
    PageHelper分页失效的可能原因之一
    el-table多选表头复选框不对齐
    好用的软件推荐
  • 原文地址:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/5679946.html
Copyright © 2020-2023  润新知