今天在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的结束为止,在从结尾的为止,遍历到开始为止。达到翻转效果。