2012-06-07 3 views
0

Мне было назначено это упражнение в колледже, но я не знаю, как реализовать структуру рекурсии («???» в коде). В if-цикле я должен сопоставить первый символ в массиве с последним и применить рекурсию для достижения центрального символа, но я не знаю, как настроить код. Основной код функции отлично компилируется.Рекурсивная функция распознавания массивов символов палиндрома

#include <iostream> 

using namespace std; 

const int DIM = 8; 

bool is_palindrome (char* first, char* last) 
{ 
    if (first == last) 
    { 
     ??? 
    } 
    else 
    return false; 
} 

int main() 
{ 
    char a[DIM] = {'i','n','g','e','g','n','i','\0'}; 
    char *first = &a[DIM] + 1; 
    char *last = &a[DIM] -1; 

    if (is_palindrome(first, last)) 
     cout << " the char array is palindrome "; 
    else 
      cout << " the char array is not palindrome "; 

    return 0; 
} 

ответ

0
using namespace std; 

const int DIM = 8; 

bool is_palindrome (char* first , char* last) 
{ 
    if (*first == '\0') 
    { 
     return false; 
    } 
    else if (first >= last) 
    { 
     return true; 
    } 
    else if (*first == *last) 
    { 
     return is_palindrome(first + 1, last - 1); 
    } 
    else 
    { 
     return false; 
    } 
} 

int main() 
{ 
    char a[DIM] = {'i','n','g','e','g','n','i','\0'}; 
    char *first = a; 
    char *last = &a[DIM] - 2; 

    if (is_palindrome (first , last)) 
    { 
     cout << " the char array is palindrome "; 
    } 
    else 
    { 
     cout << " the char array is not palindrome "; 
    } 

    return 0; 
} 
+0

Большое вам спасибо! :) –

+1

Домашнее задание == не дают ответа бесплатно ... –

+0

@MichaelDorgan Я не просил ответа бесплатно, я спросил предложения. –

2

Прежде всего, вам нужно будет сравнить значения на которые указывают указатели, а не указатели сами

if (*first == *last) 

Во-вторых, вы можете заранее первый и уменьшить последний переместить один символ:

// inside if 
++first; 
--last; 

и вызовите функцию снова с новыми значениями указателей:

return is_palindrome(first, last); 

Вы также должны убедиться, что вы не идете мимо массива, когда вы на самом деле получить палиндром, поэтому добавьте эту проверку к началу is_palindrome()

if (last < first) { 
    return true; 
} 

Кроме того, в main() вам нужно инициализировать указатели таким образом:

char* first = &a[0]; 
char* last = &[DIM-2]; 

так, как вы написали это first уже указывает мимо массива, в то время как last указывает на ENDI ng '\0', который не соответствует ни одному из других символов.

+0

Большое вам спасибо, большое объяснение! –

+0

@ osiris_0100 - обновлен возврат для 'if (last Attila

Смежные вопросы