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