2014-10-29 59 views
-2

對不起,如果這看起來真的不好用,而且事實是,我現在只研究了一個月左右。我似乎無法讓這個工作正確,想知道你們中的任何一位能否幫助我。該程序曾經編譯過,只是說輸入的文字是「非迴文」,即使它們是。使用數組和無指針創建Palindrome字符串檢查器C++

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

bool isPal (char[], int); 

int main() 
{ 
    const int size = 10; 
    int flag = 0; 
    char arr[size]; 

    cout << "Enter Word\n"; 
    cin.getline(arr,10); 
    flag = isPal(arr, size); 

    if (flag == true) 
    cout << "Word is Palindrome\n"; 
    else 
    cout << "Not Palindrome\n"; 
    return 0; 
} 

bool isPal (char arr [],int size) 
{ 
int q = 0; 
char arr2[size]; 
for (int i = 0;i < size - 1; i++) 
{ 
    arr2[i] = arr[9 - q]; //here I attempt to reverse arr1 and assign each element to arr2 
    q++; 
} 
for (int j = 0; j < size - 1; j++) 
{ 
    if (arr [j] != arr2[j]) 
    return false; 
} 
    return true 
} 
+3

遺憾地告訴你,但你的程序是使用指針。 'isPal'裏面的'arr'就是這個。 – chris 2014-10-29 18:49:58

+0

我還沒有研究過指針是什麼,所以我想我一直在不知不覺中使用它們。 – chris 2014-10-29 18:53:21

+0

這可能會有幫助。 http://stackoverflow.com/questions/9106295/palindrome-program。和http://stackoverflow.com/questions/3285432/to-find-if-a-given-string-is-palindrome-or-is-not-palindrome – 2014-10-29 18:55:13

回答

0

如果你只想使用普通的C數組,然後用下面的代碼檢查: -

bool isPallindrome (char *p, int size) //Remember here size must be one character before null     //terminator. 
{ 
char *begin, *end; 
begin = p; 
end = p + size; 
while (begin != end) 
{ 
if(*begin != *end) 
    break; 
begin++; 
end--; 
} 
if (begin != end) 
    return false; 
return true; 
} 
0
  1. 初始化ARR2

  2. 使用strlen知道長度您輸入,而比使用size,因爲你的輸入數據並不總是固定在10

在原來的代碼:

input: 1234567 
*arr => "1234567\0" 
*arr2 => "??\07654321" 
  • 使用size取代q
  • bool isPal (char arr [],int size) 
    { 
        //q=0;         /* modified 3 */ 
        char arr2[size] = "";      /* modified 1 */ 
        for (int i=0; i<strlen(arr); i++)   /* modified 2 */ 
        { 
         arr2[i] = arr[strlen(arr)-i-1];  /* modified 2 */ 
         //q++;        /* modified 3 */ 
        } 
        for (int i=0; i<strlen(arr); i++)   /* modified 2 */ 
        { 
         if (arr[i] != arr2[i]) 
          return false; 
        } 
        return true 
    } 
    

    陣列是「一指針指向數組添加的開始雷斯「,但對於新手來說,瞭解它的工作原理並不容易。直到你學會本章pointer

    繼修改原代碼的例子,你可以保留這個線程:

    char arr[size]; 
    char arr2[size]; 
    // char *parr = (char*)malloc(sizeof(char)*size); 
    // char *parr2 = (char*)malloc(sizeof(char)*size); 
    
    cin.getline(arr,10); 
    // parr = &arr[0]; 
    // cin.getline(parr, 10); 
    
    arr2[i] = arr[9 - q]; 
    // parr1 = &arr[9-q]; 
    // parr2 = &arr2[i] 
    // *parr2 = *parr1; 
    
    if (arr [j] != arr2[j]) 
    // parr1 = &arr[j] 
    // parr2 = &arr2[j] 
    // if (*parr1 != *parr2)