2015-10-06 2 views
0

Я попытался найти решение в Интернете, но не смог найти ничего подобного. Я использую strcpy и итерацию, чтобы сделать функцию палиндрома в C++, все работает нормально, но раздел strcpy. Я не знаю, как его решить или какую альтернативу использовать. Спасибо.Palindrome C++ (strcpy)

#include <iostream> 
#include <cstring> 

using namespace std; 

void palindrom(char[]); 

int main() 
{ 
    char binput[100]; 

    cout << "Hello please enter your word here: " << endl;  
    cin >> binput; 
    palindrom(binput); 

    system("pause"); 
    return 1; 
} 

void palindrom(char binput[]) 
{ 
    int max= strlen(binput); 
    char cinput[100]; 
    char dinput[100]; 

    for (int i=max, n=0; i>=0, n<=max; i--, n++) 
     strcpy(dinput[n],binput[i]); 

    cout << dinput << endl; 

    if (strcmp(binput,dinput)==true) 
     cout << "Is palindrome " << endl; 
    else 
     cout << "Is not " << endl; 
} 
+0

* "Я использую STRCPY" * - используйте 'станд :: string'. –

+0

Вам это нужно в C++ или java ok? –

+0

@ JürgenK. Мне нужно это в C++ спасибо –

ответ

0

Надеется, что это solves.Basically первый раза проверить первую букву слова и последнего. Если они не равны, то они не являются палиндром. Если они равны, то продолжайте, сравнивая их с символом переднего конца с соответствующими задними концами.

#include<iostream> 
#include<cstring> 
using namespace std; 

int CheckPalindrome(char input[],int len); 


int main() 
{ 
    char input[100]; 
    int result,inpLen; 


    cout<<"Enter Word:"<<endl; 
    cin>>input; 
    cout<<"Entered Word:"<<input<<endl; 
    cout<<"Checking....."<<endl; 
    inpLen=strlen(input); 
    result=CheckPalindrome(input,inpLen); 
    if(result == 1) 
    { 
    cout<<"Entered Word:"<<input<<" is a palindrome!"<<endl; 
    } 
    else 
    { 
    cout<<"Entered Word:"<<input<<" is not a palindrome!"<<endl; 
    } 

return 0; 
} 

int CheckPalindrome(char input[],int len) 
{ 

    int result; 

    if(input[0] != input[len-1]) 
    { 
     result = 0; 
    } 
    else 
    { 
    for(int i=0 ; i<len ; i++) 
    { 
    if(input[i] == input[len-1-i]) 
    { 
     result = 1; 
    } 
    else 
    { 
     result = 0; 
     break; 
    } 
    } 
    } 

return result; 
} 
+0

Спасибо, это очень хорошая альтернатива. –

-1

Вы должны инициализировать я макс-1 вместо макс, то, как вы имеете ее теперь будет копировать NULL терминатора символ «\ 0» к первому элементу входных сигналов, что приводит к строке с 0 длиной.

Вам также необходимо убедиться, что NULL завершает прохождение. Попытка:

for (int i=max-1, n=0; i>=0, n<=max; i--, n++) 
    dinput[n] = binput[i]; 

dinput[max] = '\0'; 
+0

Вы пробовали компилировать свой код? -1. –

+0

Да, это на меня. Я пошел с первой очевидной проблемой, которую я увидел, и зафиксировал ее. Закрепление рабочего кода./sigh – Scott

+0

@Scott Вы правы насчет нулевой благодарности. Но код по-прежнему не компилируется из-за strcpy. –

0

Похоже, что вы не знаете, что такое strcpy. Он копирует целую строку из источника в пункт назначения. Тебе здесь не нужно. Вам нужно сделать простые задания.

Предположим, что ваш вход "abc". Я предполагаю, что вы хотите создать строку "abccba".

Учитывая символы во входном:

+---+---+---+ 
| a | b | c | 
+---+---+---+ 

вам нужно отобразить их в выходной массив как:

binput[0] 
|  binput[len-1] 
|  | binput[len-1] 
| .... | |  binput[0] 
|  | | .... | 
v  v v  v 
+---+---+---+---+---+---+ 
| a | b | c | c | b | a | 
+---+---+---+---+---+---+ 

Теперь перевести эту логику в код:

int len= strlen(binput); 
char dinput[100]; 

for (int i = 0; i < len; ++i) 
{ 
    dinput[i] = binput[i];   // Takes care of the left side of the palindrome. 
    dinput[2*len-i-1] = binput[i]; // Takes care of the right side of the palindrome 
} 

// Make sure to null terminate the output array. 
dinput[2*len] = '\0'; 

Обновление в ответ на комментарий ОП

Понадобится:

for (int i = 0; i < len; ++i) 
{ 
    dinput[len-i-1] = binput[i]; 
} 
dinput[len] = '\0'; 
+0

Да, я понял логику здесь, очень мощный, но мне не нужен «abccba». Мне нужно, чтобы dinput был только «cba», чтобы иметь возможность сравнить позже с binput и проверить, есть ли его палиндром. Спасибо вам почти. –

+0

@Alfiebrown, см. Обновление. –

0
if(strcmp(word,strrev(word)==0) 

Pallindrome