找到我的回文需要你的帮助

时间:2014-01-06 14:43:39

标签: c string palindrome

需要你的帮助才能找到回文。

我的回文中的问题是:当我放一句话时,测试不能很好地执行,因为我的程序只检查第一个字母和最后一个字母所以这会导致问题 句子的第一个字母值得最后一个字母,但第二个字母不值得上一封信之前的那个。

如果你可以帮我解决这个问题,我很感激 感谢。

我的代码 -

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

char recursive_palindrome(const char st[], int first, int last )
{
if(st[first] != st[last])
{
    return(0);
}   
if(last-first<=1)
{
    return(1);
    return(recursive_palindrome(st, first+1,last+1));
}
}

int main()
{
char st[255];
printf("enter a string: \n");
gets(st);

if ( recursive_palindrome(st,0,strlen(st)-1))
{
    puts("yes\n");
}
else
{
    puts("No");
}
}

3 个答案:

答案 0 :(得分:2)

if(last-first<=1)
{
    return(1);
    return(recursive_palindrome(st, first+1,last+1));
}

应修改为

if(last-first<=1)
{
    return(1);
}
return(recursive_palindrome(st, first+1,last-1));

请注意,如果recursive_palindrome(),您的原始st[first] == st[last] && last-first > 1未收到任何退货声明。编译器应该发出警告。

答案 1 :(得分:0)

该行

return(recursive_palindrome(st, first+1,last+1))

不应该在条件块

if(last-first<=1) {

因为如果该分支,你想要递归。此外,它应该是:

    return(recursive_palindrome(st, first+1,last-1))

(首先向前移动,向后移动)。

答案 2 :(得分:0)

请你试试这段代码,我解决了以下问题:

1)if(first > last)之前的if(st[first] != st[last]),以便您节省额外的电话费 2)此修复:

if(st[first] != st[last])   
{   
    return(0);   
}

3)此调用添加了最后+ 1,这是错误的!

return(recursive_palindrome(st, first+1,last-1));

守则:

char recursive_palindrome(const char st[], int first, int last )
{
    if(first > last)
    {
        return(1);
    }

    if(st[first] != st[last])
    {
        return(0);
    }

    return(recursive_palindrome(st, first+1,last-1));
}

int main()
{
    char st[255];
    printf("enter a string: \n");
    gets(st);

    if ( recursive_palindrome(st,0,strlen(st)-1))
    {
        puts("yes\n");
    }
    else
    {
        puts("No");
    }

    return 0;
}