递归连接以null结尾的字符串

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()不是很递归-它只调用另外两个函数。有没有一种方法可以重写它,从而减少函数的数量,从而增加递归的使用,但又不牺牲太多的代码简洁性?

cat*_*alk 5

这是我的示例(优点是只有一个递归调用):

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)