每天学习一点string.h

来源:互联网 发布:好八字 知乎 编辑:程序博客网 时间:2024/05/24 20:08

    面试中总会遇到实现类似strcpy,strlen功能的程序,所以需要注意积累,每天学习一个函数!

    第一天,strcpy:

 

方案一:


char* MyStrcpy(char* strDes, const char* strSrc){assert((strDes != NULL) && (strSrc != NULL));char* Restr = strDes; //返回strDes支持链式表达式while((*strDes++ = *strSrc++) != '\0');return Restr;}

方案二:

char* MyStrcpy(char* strDes, const char* strSrc){assert((strDes != NULL) && (strSrc != NULL));char* Restr = strDes;int i = 0;for(i = 0; strSrc[i] != '\0'; i++){strDes[i] = strSrc[i];}strDes[i] = '\0';return Restr;}
总结:1、源字符串是const限定的; 2、返回的是strDes,为了支持链式表达式:strlen(strcpy(a, b)); 3、注意判断两个字符指针是否为空; 4、记住字符串结尾一定要加'\0'。


明天继续,要持之以恒,加油!

2014.05.10

    第二天,strcat函数

    

char* MyStrcat(char* strDes, const char* strSrc){assert((strDes != NULL) && (strSrc != NULL));char* ReStr = strDes;while(*strDes)++strDes;while((*strDes++ = *strSrc++) != '\0');return ReStr;}


2014.05.11

    第三天,strlen函数

    自己先写了个低端的:

unsigned int MyStrlen(const char* strSrc){assert(strSrc != NULL);unsigned int count = 0;while(*strSrc++)++count;return count;}


鉴于长度肯定不是负的,所以一定记得是unsigned的!

    然后看到一种面试填空题:

int strlen(char * str)

       if(    )

              return  (      );

       else

              return   (      ) ;

    哎呀,怎么不能使用中间变量,好吧,这只能是用递归了:

unsigned int MyStrlen(const char* strSrc){assert(strSrc != NULL);if(*strSrc == '\0')return 0;elsereturn(MyStrlen(++strSrc) + 1);}


    最后奉献一下标准版:


unsigned int MyStrlen(const char* strSrc){assert(strSrc != NULL);const char* _first = strSrc;while(*strSrc++);return(strSrc - _first - 1);}






0 0
原创粉丝点击