Strlen(char*str)または(strcpy)の実装

2430 ワード


問題のように、この2人はどれだけの英雄を倒したか分からないでしょう.私もできません.だから、今日は勉強しなければなりません.やらなければなりません.実はできないわけではありませんが、本能的な抵抗CにはC++プログラムがあります.なんだか...それも勉強しなければなりませんね.
1.Strlen(char*str)の実装
伝説のよくある筆記試験問題:中間変数を使わずにconst文字列の長さを求める、すなわち文字列の長さを求めるライブラリ関数strlen関数を実現する.
関数インタフェースは次のように宣言されます.
int strlen (const char *p);
(1)実現方法一:
/*       ,     ,      */ 
int strlen(const char *str)   
{     
	if ('\0' == *str)  
		return 0;           
	else        
		return strlen(str+1) + 1;         
}
(2)実装方法2:
/*       ,       ,        */
int strlen(const char *str)   
{                 
	return *str?(strlen(++str) + 1) : 0; 
} 

(3)実現方法3:
/*      int    */
int strlen(const char *str){
    if(str==NULL) return 0;
    int len = 0;
    for( ; *str++ != '\0'; ){
        len++;
    }
    return len;
}

 
参照リンク:
http://blog.csdn.net/tianmo2010/article/details/6667111
http://www.51testing.com/html/72/n-221172.html
2.strcpy(char*str)の実装
備考:捜犬の筆記試験の問題はこれがあって、私はその時やっていなかったので、ちょうど今日は暇で、昨日面接の問題を見たとき、上の問題に出会って、直接この2つをよく勉強しました.
   : 
void strcpy( char *strDest, char *strSrc ) 
{ 
  while( (*strDest++ = * strSrc++) != ‘\0’ );//                                 ,    '\0'   .          '\0'             
} 
  

   : 
void strcpy( char *strDest, const char *strSrc ) 
{ 
  while( (*strDest++ = * strSrc++) != ‘\0’ );//        ,      const   ,const                 ,      
} 
   

   : 
void strcpy(char *strDest, const char *strSrc) 
{ 
  assert( (strDest != NULL) && (strSrc != NULL) );assert       ,            ,           .                 ,       . 
   while( (*strDest++ = * strSrc++) != ‘\0’ ); 
} 
   


   : 
char * strcpy( char *strDest, const char *strSrc ) 
{ 
 assert( (strDest != NULL) && (strSrc != NULL) ); 
 char *address = strDest; 
 while( (*strDest++ = * strSrc++) != ‘\0’ ); 
  return address; //            ,char *strcpy(),address             ,                   ,     ,          ,return address         strDest         ,  strDest        ,             ,       ,         ,                    ,strDest               .
} 

 
参照リンク:
http://blog.csdn.net/jianxiong8814/article/details/1639863
http://zhidao.baidu.com/question/117009150.html
http://blog.sina.com.cn/s/blog_5d30110e0100z3uo.html