现在的位置: 首页 > 综合 > 正文

C strcpy()和strstr()函数的写法

2013年03月06日 ⁄ 综合 ⁄ 共 934字 ⁄ 字号 评论关闭

函数的实现要考虑全面,注重程序的代码风格,提高程序的健壮性。
strcpy函数的实现:将源字符串的内容拷贝到目的字符串中,后面的'\0'也是要拷贝到目的字符串中的。所以在调用库函数时要注意数组越界的问题。
 
 
代码
 char* strcpy( char *strDest,const
char *strSrc ) {    //将源字符串加const,表明其为输入参数
      assert( ( strDest != NULL ) && ( strSrc != NULL ) );//assert是宏不是函数,assert( strDest && strSrc )
      char *address = strDest;  
      while( ( *strDest++ = *strSrc++ ) != '\0' );
      return address;                                                               //为了实现链式操作,将目的地址返回
 }
 
 
strstr(s1,s2)是一个经常用的函数,他的作用就是在字符串s1中寻找字符串s2如果找到了就返回指针,否则返回NULL。

 const char* strstr( const char *s1, const char *s2 ) {
     assert ( s2 && s1 );
     const char *p = s1, *r = s2;
      while ( *p++ == *r++ );
      if ( *r == '\0' )
          return p;
      else {
          r = s2;
          p = ++s1;
     }
     return NULL;
 }

const char* _strstr( const char *str, const char *needle ) {
     assert( needle && src );
     const char *
p1 = src, *p2 = needle;
     while ( ( *src != '\0' ) && ( *needle != '\0' ) ) {
         if ( *src++ != *needle++ ) {
             needle = p2;
 //重置needle
             src = ++p1;    //从下一个字符开始搜索needle
         }
     }
     if ( *needle == '\0' )
         return p1;
 
     return NULL;
}

抱歉!评论已关闭.