2013-04-18 28 views
0

我想知道如何編寫一個函數來確定從波紋管代碼讀入的列表是否迴文?例如,如果說數字列表是123456,程序將打印出「該列表不是迴文」,如果列表是12321,那麼它將打印出「該列表是迴文」。如何檢查迴文列表

任何幫助,將不勝感激。

void popArray(int array1[]) { 
    ifstream infile("TEST1.TXT"); 
    if (!infile) { 
     cout << "Can't open file: " << endl; 
     exit(EXIT_FAILURE); 
    } 
    for (int i = 0; i < 10; i++) { 
     infile >> array1[i]; 
     cout << setw(2) << array1[i]; 
    } 
} 
void reverseList(int array1[]) { 
    for (int x = 9; x > -1; x--) { 
     cout << setw(2) << array1[x]; 
    } 
} 
+5

爲迴文一個簡單的測試,是扭轉你的「目錄」的臨時副本(實際上這是一個數組),如果兩個列表是相同的,那麼它是一個迴文。看起來你有一些代碼可以做到這一點,所以爲什麼不去。 – john 2013-04-18 07:41:25

回答

1

我建議使用索引i,並讓它去從0size/2。然後在循環裏面比較list[i] == list[(size - 1) - i ]

+1

你想比較'list [i]'和'list [size-1-i]'。 – Henrik 2013-04-18 07:59:21

+0

好點。在回答有關SO的問題之前,我應該醒悟過來。 – 2013-04-18 08:57:36

0
bool isPalindrome(int array1[], int size) { 
    for (int i = 0, j = size - 1; i < j; ++i, --j) 
     if (array1[i] != array1[j]) 
      return false; 
    return true; 
} 
+1

這不是非常大小不可知的。 – Rapptz 2013-04-18 07:48:15

+0

@Rapptz - 編輯。 – Henrik 2013-04-18 07:49:01

0

你甚至可以試一下這種方式

for(i=0;i<(size/2);i++) 
if(b[i] - b[size-i] !=0) 
    break; 

if(i<(size/2)) 
cout<<"Not palindrome"; 
else 
cout<<"palindrome"; 

假設b是原始數組

+1

爲什麼在使用兩個索引時只能使用一個索引並比較'b [i]'和'b [size - i]'? – 2013-04-18 07:57:03

+0

@Marius Ya。這實際上更明智。更新。 – 2013-04-18 07:59:07

+0

但是代碼中的'j'是什麼?不應該是'size/2'嗎? – 2013-04-18 08:01:09