Tuesday, June 9, 2015

Learn to write a good program from string function - practice, drills using string functions

字符串操作是我最喜欢的, 用的最多的. 也是最好的训练工具, 培训自己写出逻辑严密的代码. 花了一二个小时练习, 感觉特别好!
To write String functions  is a best drill for me to practice, and then, improve my coding skills in short time period. Time well spent. My most favorite  is to read the following notes. - April 30, 2015
阅读这个网页,
我最喜欢阅读, 享受!
第二节、字符串拷贝
题目描述:
要求实现库函数strcpy,
原型声明:extern char *strcpy(char *dest,char *src);
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
分析:如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
//得2分     
void strcpy( char *strDest, char *strSrc )     
{     
 while( (*strDest++ = * strSrc++) != '' );     
}      

//得4分     
void strcpy( char *strDest, const char *strSrc )      
{     
 //将源字符串加const,表明其为输入参数,加2分     
 while( (*strDest++ = * strSrc++) != '' );     
}      

//得7分     
void strcpy(char *strDest, const char *strSrc)      
{     
 //对源地址和目的地址加非0断言,加3分     
 assert( (strDest != NULL) && (strSrc != NULL) );     
 while( (*strDest++ = * strSrc++) != '' );     
}      

//得9分     
//为了实现链式操作,将目的地址返回,加2分!     
char * strcpy( char *strDest, const char *strSrc )      
{     
 assert( (strDest != NULL) && (strSrc != NULL) );     
 char *address = strDest;      
 while( (*strDest++ = * strSrc++) != '' );      
 return address;     
}    

//得10分,基本上所有的情况,都考虑到了  
//如果有考虑到源目所指区域有重叠的情况,加1分!     
char * strcpy( char *strDest, const char *strSrc )      
{     
 if(strDest == strSrc) { return strDest; }  
 assert( (strDest != NULL) && (strSrc != NULL) );     
 char *address = strDest;      
 while( (*strDest++ = * strSrc++) != '' );      
 return address;     
}

No comments:

Post a Comment