繁体   English   中英

用递归反转c中的字符串

[英]Reversing a string in c with recursion

我已经编写了代码来反转 c 中的字符串......它工作正常,但我无法在main()函数中返回反转的字符串。

#include<stdio.h>

main()
{
  char a[17]="abcdefg";
  reverse(a);
  printf("\n");
  system("PAUSE");
}
int reverse(char *a)
{
   if(*a!='\0')
   {   
     reverse(a+1);
   }
   printf("%c",*a);
}         

它打印反转的字符串,但我想要main()的反转字符串。 我怎样才能做到这一点?

以下是使用递归反转字符串的一种方法!

#include <stdio.h>
#include <string.h>

void rev_str_recursive(char arr[], size_t iStart, size_t iLast)
{
    if( iStart < iLast )
    {
        //swap
        char temp = arr[iStart];
        arr[iStart] = arr[iLast];
        arr[iLast] = temp;

        rev_str_recursive(arr, ++iStart, --iLast);  
    }
}

void main()
{
    char cArray[] = {"A quick brown fox jumps over a lazy dog"};

    rev_str_recursive(cArray, 0, strlen(cArray)-1);
}

您需要修改字符串,即输入缓冲区到reverse() ,而不是仅仅打印它。

递归地执行此操作似乎有点令人讨厌,但当然应该是可能的。

基本上,我想打印成为一项任务,如下所示:

  1. 基数:空串的反转是空串。
  2. 步骤:字符串的反转首先交换第一个和最后一个字符,然后递归字符串的其余部分。

这是使用递归反转字符串的另一种方法:

void reverseString(char* dest, char *src, int len) {
    if (src == NULL || len == 0)
        return;

    reverseString(dest, src + 1, len - 1);
    strncat_s(dest, len + 1, src, 1);
}

你可以这样调用:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define STRING "Let's try this one."
#define SIZE 20

void main() {

    char* src = (char*)malloc(SIZE);
    char* dest = (char*)malloc(SIZE);

    strcpy_s(dest, SIZE, "");
    strcpy_s(src, SIZE, STRING);

    reverseString(dest, src, strlen(src));
    /* Do anything with dest. */
    // printf("%s\n", dest);

    free(src);
    free(dest);
}

此代码不可执行:(您定义了 int reverse 但 reverse 函数不返回任何值

而是使用这个(使用void):

#include<stdio.h>

main()
{
  char a[17]="abcdefg";
  reverse(a);
  printf("\n");
  system("PAUSE");
}
void reverse(char *a)
{
   if(*a!='\0')
   {   
     reverse(a+1);
   }
   printf("%c",*a);
}        
#include <iostream>
using namespace std;

reverse( char *str)
{
    if (*str!='\0')
    {
       reverse(str+1);
       cout<<*str;
    }
//cout<<*str   when i am just printing here then why this is printing after one space ??
}

int main()
{   
    string a ;  
    cin>>a;   
    reverse(&a[0]); 
    return 0;
}

Emre Can Kucukoglu 的回答略有变化。 . . 我们可以消除 strncat_s

void revstr_rec(char *sstr, char *dstr, int len)
{
    int i = 0;
    if((! *sstr) || (! len) )
        return;

    revstr_rec(sstr + 1, dstr, len - 1);
    dstr[len - 1] = *sstr;

    return;
}

int main()
{
    char *sstr = NULL;
    char *dstr = NULL;

    sstr = malloc(16);
    if(! sstr)  {
        printf("no memory . . .\n");
        return 0;
    }
    strcpy(sstr, "hello world !");
    printf("sstr: %s\n", sstr);

    dstr = malloc(16);
    if(! dstr)  {
        printf("no memory . . .\n");
        return 0;
    }

    revstr_rec(sstr, dstr, strlen(sstr));
    printf("dstr(recursive): %s\n", dstr);

    free(sstr);
    free(dstr);

    return 0;
}
#include <stdio.h>
#define MAX 100
int main()
{
char str[MAX], *rev;
scanf("%s", str);
rev = reverse(str); 
printf("The reversed string is : %s\n", rev);
return 0;
}
char *reverse(char ch[])
   {
    static char r[MAX];
    static int i=0;
    if(*ch == '\0') return "";
    else 
   {
    reverse(ch+1);
    r[i++]=*ch;
   }
    return r;
   }
// Reverse string
char* reverse(char* str)
{
    if (*str == '\0')
        return str;

    char tmp = *str;
    strcpy(str, reverse(str + 1));
    str[strlen(str)] = tmp;
    return str;
}

使用sprintf它将您的反转字符串打印到缓冲区中。

#include<stdio.h>

char *b;

main()
{
  char a[17]="abcdefg";
  char buffer[17];
  buffer[0]= '\0';
  b = buffer;
  reverse(a);
  printf("%s\n",buffer);
}
int reverse(char *a)
{
   if(*a!='\0')
   {   
     reverse(a+1);
     sprintf(b,"%c",*a);
     b++;
   }

}
void palindromo(char *s)
{
    if(s[0] != '\0'){
        palindromo(s+1);
        printf("%c", s[0]);
    }
}

这是一个小的递归函数,它打印反转的字符串。

#include<stdio.h>
#include<string.h>
void rev(char *);

int main()
{
    char s[]="Hello";
    printf("\n%s",s);
    rev(s);
    printf("\n%s",s);
    return 0;
}

void rev(char *s)
{
    static int i=0;
    static int j=0;
    if(j==0)                   //since static variable can be intitialized 
    {                          //only with a constant literal,to store 
        j=strlen(s)-1;         //length-1 in 1st function call, we can use 
    }                          //this trick.(condition satisfied only in 1st 
                               //function call)
    if(i<j)
    {
        char temp;
        temp=s[i];
        s[i]=s[j];             //Analogous to for(i=0,j=l-1;i<j;i++,j--)
        s[j]=temp;             //                { //swap code }
        i++;
        j--;
        rev(s);           
    }
}
#include<stdio.h>
void reverse(char *a);
main()
{
  char a[17]="abcdefg";
  reverse(a);
  printf("\n");
  system("PAUSE");
}
void reverse(char *a)
{
   if(*a!='\0')
   {   
     reverse(a+1);
   }
   printf("%c",*a);
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM