3

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()。これどうやってするの?

4

12 に答える 12

6

以下は、再帰を使用して文字列を逆にする 1 つの方法です。

#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);
}
于 2013-08-14T00:56:43.553 に答える
5

文字列を変更する必要があります。つまり、reverse()単に出力するのではなく、入力バッファを に変更する必要があります。

これを再帰的に行うのは少し不快に思えますが、もちろん可能です。

基本的に、印刷は次のような割り当てになると思います。

  1. ベース: 空文字列の反転は空文字列です。
  2. ステップ: 文字列の反転は、最初と最後の文字を交換することから始まり、文字列の残りの部分を再帰します。
于 2012-10-03T11:14:27.620 に答える
0

このコードは実行できません:( 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);
}        
于 2012-10-03T11:22:17.250 に答える
0
#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;
}
于 2016-10-05T01:44:12.673 に答える
-1
void palindromo(char *s)
{
    if(s[0] != '\0'){
        palindromo(s+1);
        printf("%c", s[0]);
    }
}

これは、文字列を反転して出力する小さな再帰関数です。

于 2015-09-18T08:22:07.633 に答える
-1

それを使用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++;
   }

}
于 2012-10-03T11:17:00.110 に答える