C语言 用递归法把字符串倒置
答案:2 悬赏:0
解决时间 2021-03-22 19:44
- 提问者网友:优雅ぉ小姐
- 2021-03-22 06:04
#include
void fun(char s[],int l,int h)
{
char t;
if( l>h) return;
else
{
fun(空);
t=s[l];s[l]=s[h];s[h]=t;
}
}
最佳答案
- 二级知识专家网友:气场征服一切
- 2021-03-22 07:43
void recur(char *c,int k){
char tmp;
if(k>1){
recur(c+1,k-2);
tmp=c[0];
c[0]=c[k-1];
c[k-1]=tmp;
}
}
int main()
{
char *c="abcdefg";
int k=strlen(c);
recur(c,k);
puts(c);
getch();
}
全部回答
- 1楼网友:恕我颓废
- 2021-03-22 08:30
只告诉你思路,自己写代码。
1. 为简单,弄个足足够大的字符数组 因为整数最大是9还还是10个数了,忘了,你可以申请数组长度11或者更大都行。 申请两个。一个存倒序,一个存正序。
2. 在while循环中,首先对整数除以10求余数,c语言是%,这样最后一个数字就出来了,+‘0’ 或者|0x30,得到相应数字的ascii码,其实就已经把这个数字转成字符了,存到数组里。
3. 然对整数反复除以10, c语言是(/),取整,方法很简单,直接把/后的结果=一个整形变量,直接就是取整了,否则调用取整函数也行,那样麻烦。这样,最后一位数字被砍掉,因为第2部已经处理过它了。
4. 反复上面步骤,循环,直到最后一个数字,(判断条件为%10的余数为0), 说明所有数字处理完了,循环终止,在这中间过程最后有个计数器,计下你共存了多少个数,做为第5步的长度。
5. 由于这时候得到的数组是倒的,也就是从最后一个数字开始存储的,要把它倒过来,存到另外一数组里。这部用一个for循环就搞定。
不好意思,我的答案是非递归的。
递归更简单,
#include
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
如果要把结果存到数组里,自己调整一下吧。
我要举报
大家都在看
推荐资讯