一道字符串面试题:很少有人可以快速准确做出来

时间:2021-06-24 19:42:26

今天在C++论坛上看到一个关于字符串的面试题,反映很强烈,跟帖很多。所以把这道题整理出来,希望对大家以后有所帮助,具体见链接

题目:

编写如下形式的字符串处理函数,要求将S1指向的字符串倒向复制给S2,如*S1 = "hello",则使 *S2 = "olleh"。

要求:

1:不能使用除S1,和S2以外的其余任何变量。

2:不能使用库函数
函数名:

void reverse_str( const char* s1 ,char* s2);

分析:

由于这道题的要求是不能使用其他的变量和库函数,所以要把一个字符串翻转,没法用堆栈和自己写的相似函数。想到,递归可以得到堆栈的效果。所以递归比较好想到。

 

递归例子1:

这个递归构造的很有技巧:在str1递归到结束字符'/0'时,str2 = '/0';语句把str2全部置空,为空字符串。

在递归回朔时,通过while(*str2 !='/0'),找到每次,队规的str2的结束为止,加入str1的值。完成翻转工作

非递归例子1

这个例子,同样很有技巧,并且也容易懂。就是第一个while循环,找到str1的结束为止,在从结尾的为止,遍历到开始为止。达到翻转效果。