sha*_*oth 0 c c++ string recursion
我发明了面试问题,需要分析C ++代码,这些代码对指针和递归的操作很简单。我试图以strcat()递归方式编写:
size_t mystrlen( const char* str )
{
if( *str == 0 ) {
return 0;
}
return 1 + mystrlen( str + 1 );
}
void mystrcpy( char* to, const char* from )
{
if( ( *to = *from ) == 0 ) {
return;
}
mystrcpy( to + 1, from + 1 );
}
void mystrcat( char* to, const char* from )
{
mystrcpy( to + mystrlen( to ), from );
}
Run Code Online (Sandbox Code Playgroud)
我在这里不喜欢的是我有三个函数,而且我strcat()不是很递归-它只调用另外两个函数。有没有一种方法可以重写它,从而减少函数的数量,从而增加递归的使用,但又不牺牲太多的代码简洁性?
这是我的示例(优点是只有一个递归调用):
char * mystrcat(char *dest, const char *src){
if(*dest == 0){
if(*src == 0) // end of recursion cond
return dest;
*dest = *src++; // actual copy
dest[1]=0; // zero out dest buf
}
mystrcat(dest+1,src); // advance one char
return dest;
}
Run Code Online (Sandbox Code Playgroud)
这是粗略的测试代码:
main(){
char c[]={'a',0,'b','c',0};
//char c[]={0,'b','c',0};
mystrcat(c,"xy");
//mystrcat(c,"");
puts(c);
}
Run Code Online (Sandbox Code Playgroud)