控制台图像 我用 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;
错误出在你的 printf 函数中
printf("stringleft:%c,stringright:%c,Left:%d,right:%d\n", string[left], string[right], left, right);
您应该首先通过
string[left]
和 string[right]
,然后才通过 left
和 right
。
请注意,实际上您传递的是字符,而不是字符串