簡體   English   中英

使用遞歸函數反轉字符串

[英]Reversed String Using Recursion Functions

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

void rec(char pin[]);

main()
{
      char pin[100];
      printf("Give word: ");
      scanf("%s", pin);
      rec(pin);
      system("pause");
}

void rec(char pin[])
{
     int i=0;
     if (pin[i]=='\0')
        return;

     else
     {    
        rec(pin[i+1]);
        printf("%c", pin[i]);

     }

}

好吧,似乎行不通,但我不知道為什么。 (不允許使用for循環,strlen函數等)。

在rec函數else部分中,您傳遞的元素應該是element.so的地址,因此請在else部分中嘗試此操作

else
     {    
        rec(&pin[i+1]);
        printf("%c", pin[i]);

     }

好吧,既然您的問題是“為什么不起作用”,那么不妨回答一下。

我將假設re()聲明只是rec()的錯字-當然,您必須更正它。

在該函數的第一行中,您聲明一個變量int i = 0; 但是,該變量不會再分配給該變量。 掃描功能以查找i上的任何分配-您將找不到任何分配。 因此, i變量是常數0。考慮到這一點,讓我們將i替換為0並再次編寫代碼:

if (pin[0]=='\0')
    return;
else
{    
   rec(pin[1]);
   printf("%c", pin[0]);
}

令人反感的行顯然是rec(pin[1]) 該函數需要一個char *參數,即一個字符串(請注意, char *char []在函數參數聲明中相同)。 但是, pin[1]只是pin的第二個字符。 您正在執行的操作是將該字符隱式轉換為指針,然后將其傳遞給函數-這是不正確的。

您想要傳遞給rec()是指向第二個字符的指針,因為這將使其成為指向從pin的第二個字符開始的字符串的指針。 因此,正確的調用將是rec(pin + 1) ,而不是rec(pin[1]) 由於pin指向字符串的第一個字符,因此pin + 1指向第二個字符。

這是不正確的。 首先,您正在使用自動變量。 因此,“ i”將始終初始化為0。

使用static int i,並仔細查看。 您將char變成char *。 因此,您不能拋出rec(pin [i + 1]); 將此更改為rec(pin); 並且在printf(“%c”,pin [i])之前; 遞減調用i之前,先遞減“ i”。 最后但並非最不重要的一點是,您正在調用“ rec”。 但是函數名是“ re”,c在哪里?

void rec(char pin[]){
    if (*pin=='\0')
        return;
    else {
        rec(pin + 1);
        printf("%c", *pin);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM