2014-02-12 263 views
0

我想確定我的代碼是否是迴文,因此我創建了一個反轉函數,然後是迴文函數。我正在嘗試將反轉字符數組分配到新函數中,但我似乎無法使其編譯....任何提示? 這裏是我的迴文功能如何在函數內調用函數?

bool Palindrome(char Characters[], unsigned long length) 
{ 
    char tempstring[62]; 
    tempstring[62] == reverse(Characters); 

    for(int i=0; i <= length; i++){ 
     if(Characters[i] == tempstring[i]) 
      return false; 
     else 
      return true; 
    } 

} 

這裏是我的反向功能首先

void reverse(char Characters[], unsigned long length) 
{ 
    char temp; 

    for(int i=0; i<length/2; i++){ 
     temp = Characters[i]; 
     Characters[i]=Characters[length-i-1]; 
     Characters[length-i-1]=temp; 

    } 
} 
+2

你的主要問題是你正試圖給臨時變量[62]賦值,儘管反向函數是一個void(不返回任何東西)。只要按照埃德希爾的答案,你會沒事的。 –

回答

1

你讓這很複雜。

只要找到字符串的末尾(strlen)。每次從兩端讀取一個字符,如果它們不匹配,則不是迴文。如果指標變得相同或者它們相交,那麼你就完成了。這確實是一個迴文。

bool Palindrome(char *s) { 
    int left = 0, right = strlen(s) - 1; 
    while (left < right) { 
     if (s[left] != s[right] return false; 
     ++left; 
     --right; 
    } 
    return true; 
} 

EDIT

類似徒然來構造反向

char *Reverse(char *s) 
{ 
    char *rev = new char[strlen(s) + 1]; 
    int left = 0, right = strlen(s) - 1; 
    while (right > -1) { 
     rev[left] = s[right]; 
     right--; 
     left++; 
    } 
    rev[left] = 0; 
    // Remember to use delete[] 
    return rev; 
} 

編輯2

或者

void Reverse(char[] s, int len) { 
    int left = 0; right = len; 
    while (right > -1) { 
     char t = s[left]; 
     s[left] = s[right]; 
     s[right] = t; 
     left++; right--; 
    } 
} 

然後製作字符串的副本,將其反轉並進行比較。

+0

感謝您的輸入,但我希望能夠使用另一個功能,它的正義實踐是所有,並想知道我做錯了什麼?因爲我在幾次主調中也調用了相同的反轉功能。 @ed heal –

+0

@ user3078582 - 見上面 –

+0

如果沒有第一個編輯「記住使用刪除」,這將是一個可以接受的答案。 –

4

第一件事,你有一個錯字; ==是一個比較等式,=。你應該已經寫

tempstring[62] = reverse(Characters);

但是,這仍然無法工作。對於初學者,reverse是一個void函數,因此它不返回一個值。

最快的修復將替換該行以

reverse(Characters, length); 

(請注意,我也傳遞length參數的要求)。

的最後一件事:如果你已經安排您的文件,以便reverse出現Palindrome後,那麼你需要前使用此語句聲明reverse

void reverse(char Characters[], unsigned long length); 

修復該編譯錯誤。我懇請您檢查運行時行爲。

+1

@bathseba長度不被稱爲什麼? –

+1

這是不好的 –

+0

@DieterLücking:對不完整答案的道歉。我已經解決了這個問題。 – Bathsheba

1

您的錯誤是行tempstring[62] == reverse(Characters);。你不需要double =符號。將來,編譯時發佈錯誤消息會很有幫助。

bool Palindrome(char Characters[], unsigned long length) 
{ 
    char tempstring[62]; 
    tempstring[62] = reverse(Characters); 

    for(int i=0; i <= length; i++){ 
     if(Characters[i] == tempstring[i]) 
      return false; 
     else 
      return true; 
    } 

} 
+0

當我這樣做,我也必須聲明長度,因爲長度是在反向的原型,這給我這個錯誤在函數'布爾迴文(char *,長無符號整數)': Reversal2.cpp:97:19:錯誤:void值不會被忽略,因爲它應該是 tempstring [62] = reverse(Characters,length); –

+0

您的'reverse'函數被聲明爲'void',但您期待它返回一個值以存儲在'tempstring'中。你也走了'tempstring'數組的末尾,試圖爲索引62分配一個值。有效索引從0到61. – LeonardBlunderbuss

0

你的錯誤是在這裏:

tempstring[62] == reverse(Characters); 

你寫==手段,返回true或false(例如:if (5 == 7) - >假)的條件

但是你其實想做的是tempstring[62] = reverse(Characters);

一個=意味着等於(int a = 3

兩個==表示檢查的條件(例如if (a == b)(而這就是爲什麼你不以IFS寫:if(a = 3)因爲它會分配a = 3和百達獲得if

+0

這個也不好 –

0

首先裏面,你的反向函數返回什麼,因此試圖轉讓其返回值什麼是行不通的:

tempstring[62] == reverse(Characters); // won't work as it is attempting to compare a void 
tempstring[62] = reverse(Characters); // won't work as it is attempting to assign a void 

從更根本的層面,測試的是一個迴文結構比你簡單得多正在使:

bool Palindrome(char Characters[], unsigned long length) 
{ 
    bool result = true; 
    for(int i=0; i < length/2; i++) 
    { 
     if (Characters[i] != Characters[length - i - 1]) 
     { 
      result = false; 
      break; 
     } 
    } 
    return result; 
}