“回文递归函数”正确检测回文,但行为不符合预期

问题描述 投票:0回答:1

控制台图像 我用 C 语言编写了一个递归函数,用于打印输入的字符串是否是回文。 它给出了正确的答案,但左指针和右指针有奇怪的值,并且 printf 对于字符串“ana”打印 4 次而不是 2 次。有人可以解释一下发生了什么吗?

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int palindrome(int left,int right,char string[])
{
    printf("stringleft:%c,stringright:%c,Left:%d,right:%d\n",left,right,string[left],string[right]);
if(left==right){
    return 1;
}
if(string[left]!=string[right]){

    return 0;
}


left++;
right--;

palindrome(left,right,string);  

}
int main(int argc, char *argv[]) {
char s[20];
int right=0;
printf("Please input the string:");
scanf("%s",s);
while(s[right]!='\0'){
    right++;
}
right--;
printf("Right:%d\n",right);
if(palindrome(0,right,s))
{
    printf("\nEntered string is palindrome!  %d",palindrome(0,right,s));
}
        
    else {
        printf("\nEntered string is not palindrome. %d",palindrome(0,right,s));
    }
    
}

我期望字符串“ana”,left=0,right=2 string[left]=a,string[right]=a;left=1,right=1,string[left]=n,string[right]= n;

c string recursion
1个回答
0
投票

错误出在你的 printf 函数中

printf("stringleft:%c,stringright:%c,Left:%d,right:%d\n", string[left], string[right], left, right);

您应该首先通过

string[left]
string[right]
,然后才通过
left
right

请注意,实际上您传递的是字符,而不是字符串

© www.soinside.com 2019 - 2024. All rights reserved.