[英]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.