注册 登录
编程论坛 C++教室

怎样用递归法使字符串倒序

柳丝飘絮 发布于 2008-04-08 22:45, 3846 次点击
各位高手:怎样用递归法使字符串倒序?
13 回复
#2
zjl1382008-04-08 22:56
字符串倒序干吗要用递归呢?
今晚没时间讨论了,学校要关灯了,明天再来看,呵呵。。
#3
sunkaidong2008-04-08 23:21
#include<iostream.h>
#include<stdio.h>
void reverse(char *a,int i,int n)
{
  if(i==n)
      cout<<a[i]<<"\t";
  else
      reverse( a, i+1, n);
      cout<<a[i-1]<<"\t";
}
int main()
{   int n;
    cout<<"请输入字符数组长度!"<<endl;
    cin>>n;
    char *p=new char[n];
    gets(p);
    reverse(p,1,n-1);
    cout<<endl;
    
}
#4
wxwy3glp2008-04-15 11:10
#include <stdio.h>
#include <string.h>
void reverse(char *s, int i, int n)
{
    if(i == n)printf("%c", s[i]);
    else
    {
        reverse(s, i+1, n);
        printf("%c", s[i]);
    }
}
int main()
{
    char s[100];
    scanf("%s", s);
    reverse(s, 0, strlen(s)-1);
    return 0;    
}
#5
wxwy3glp2008-04-15 11:10
e
3楼的有点问题
#6
sunkaidong2008-04-15 12:09
我的有什么问题?说来听听..
#7
tymstill2008-04-15 15:02
是有问题啊,运行一下看看
#8
sunkaidong2008-04-15 15:38
我用动态数组节约空间,所以必须输入字符长度。这不是什么问题。。。
#9
野比2008-04-17 19:17
可以for一下取个长度嘛   不然就是“有问题”了
#10
flylee2008-04-18 00:12
程序代码:

#include <iostream>
using namespace std;

void reverse(string &s, int a, int b)
{
    if(a<b)
    {
        swap(s[a],s[b]);
        reverse(s,a+1,b-1);
    }
}

int main()
{
    string s;
    cin>>s;
    cout<<"Before reverse:\n"<<s<<endl;
    reverse(s, 0, s.length()-1);
    cout<<"After reverse:\n"<<s<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

用GCC调过,VC没试过,可能会有问题
#11
柳丝飘絮2008-04-27 07:49
相当棒,谢谢各位
#12
中学者2008-04-27 09:54
程序代码:

void reverse(char* arr,int size_a,const char* pat,int size_p)
{
      if(size_a == size_p)  arr[size_a-size_p-1] = pat[size_p];
      else
      {
          arr[size_a-1-size_p] = pat[size_p];
          reverse(arr,size_a,pat,size_p+1);
      }
}
arr[strlen(pat)] ='\0';
#13
abelsky2008-04-28 20:55
我只是菜鸟
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int t;
    char str[1024];
    gets(str);
    t=strlen(str);   //求字符串长度
    int n=t-1;
    for(int j=0;j<n;j++,n--)     //进行转换  实现字符反转
    {
        char t;
        t=str1[j];
        str1[j]=str1[n];
        str1[n]=t;            
    }
    puts(str);
    return 0;
}
#14
jinabest2008-11-07 14:09
我的答案!供参考!递归实现,可反转任意长度的字符BUFFER!VC++2008通过!
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
void reverse(char *a,unsigned int l)
{
    unsigned int count=l/sizeof(char);
    if(count>=2)
    {
        int h=count/2;
        char *temp=new char[h];
        for(int i=0;i<h;i++){*(temp+i)=*(a+i);};
        for(int i=0;i<h;i++){*(a+i)=*(a+(count-h)*sizeof(char)+i);};
        for(int i=0;i<h;i++){*(a+(count-h)*sizeof(char)+i)=*(temp+i);};
        delete[] temp;
        reverse(a,h*sizeof(char));
        reverse(a+(count-h)*sizeof(char),h*sizeof(char));
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    char a[200];
    ZeroMemory(a,sizeof(a));
    gets(a);
    reverse(a,strlen(a)*sizeof(char));
    cout<<a;
    Sleep(4000);
    return 0;
}
1