【发布时间】:2015-06-01 06:50:09
【问题描述】:
我正在编写一个程序来使用递归检查字符串是否为回文。回文字符串可以向后读取,就像向前读取一样。但是以下是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
printf("Enter the number of characters in your string\n");
scanf("%d",&num);
char string[num];
char string2[num];
int i;
printf("Enter your string\n");
for (i=0;i<num;i++)
{
scanf("%c",&string[i]);
}
fillString(string,string2,num);
int palin = isPalind(string,string2,num);
if (palin) printf("The string you entered is palindrome");
else printf("The string you entered is not palindrome");
return 0;
}
int isPalind(char string[],char string2[],int num)
{
int i=0;
while (i<num)
{
if (string[i]!=string2[i])
{
i++;
return 0;
}
else{
i++;
return 1*isPalind(string,string2,num);
}
}
}
void fillString(char string[],char string2[],int num)
{
int i;
for (i=1;i<num;i++)
string2[i-1]=string[num-i];
}
我有一个逻辑错误,程序编译正常并执行,但它总是给出“字符串不是回文”
【问题讨论】:
-
你为什么打电话给
return 1*isPalind(string,string2,num);? -
首先我输入字符串中的字符数,然后输入字符串,但无论我的字符串是什么,它总是会给我“字符串不是回文”
-
@Wimmel 这是递归,所以它会一直执行直到计数器等于数字或直到它发现字符串不是回文(从结果“0”)
-
@RayaRateb 但在每个递归调用中,您将 i 设置回 0,并且只比较第一个字符。
-
@RayaRateb 顺便说一句,问题可能是你的
scanf,见Why scanf(“%d”, …) does not consume '\n'?