字符串操作是我最喜欢的, 用的最多的. 也是最好的训练工具, 培训自己写出逻辑严密的代码. 花了一二个小时练习, 感觉特别好!
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,
原型声明: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