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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值