2014-01-06 3 views
0

Вам нужна ваша помощь в поиске палиндрома.Вам нужна помощь в поиске моего палиндрома

Проблема в моем палиндроме: когда я прикладываю предложение, тест не выполняется хорошо, потому что моя программа проверяет только первую букву и последнюю букву. Так что это вызывает проблемы С первой буквой предложений стоит последняя буква но второе письмо не стоит того, что было до последнего письма.

Если вы можете мне помочь, я ценю это Спасибо.

мой код -

#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"); 
} 
} 
+0

Вы должны включить более высокий уровень предупреждения и посмотрите на предупреждения компилятора. В recursive_palindrome вы получите одно предупреждение для недостижимого кода (третий возврат) и предупреждение о достижении конца функции без возврата. Оба являются (а не единственными) ошибками, которые вы должны исправить. –

+0

Наша помощь, ваш палиндром? –

+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. Компилятор должен был предупредить об этом.

+0

Извините, но все равно это не помогло даже разрушить то, что было до сих пор. –

+0

@ user3165740 Что вводит результат неправильного результата? – timrau

0

Линия

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

не должно быть в условном блоке

if(last-first<=1) { 

, потому что вы хотите рекурсию, если эта отрасль является не принято. Также должно быть:

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

(сначала перемещается вперед, последний движется назад).

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; 
} 
Смежные вопросы