2013-10-22 30 views
1

因此,我製作了一個程序,我必須輸入一個單詞並顯示它是否是迴文(兩種方式相同的單詞)。Palindrome程序中的數組

#include <stdio.h> 
#include <string.h> 
int main(int argc, const char * argv[]){ 
    char word; 
    int length, counter; 

    printf("Please enter a word: "); 
    scanf("%c", &word); 

    int flag = 1; 

    for (counter = 0; counter < length && flag; counter++) { 
     printf("%c\t %c", word[counter], word[length - counter]) 
     if (word[counter] == word[length - counter - 1]){ 
      flag = 0; 
     } 
    } 
    if (flag) { 
     printf("%c is a palindrome!", word); 
    } 
    else { 
     printf("%c is NOT a palindrome!", word); 
    } 
} 

我設置它,使它顯示每個字母並排。如果一封信不一樣,那麼該標誌被「拋出」(設置爲0),這將結束程序,並說:「單詞不是迴文。

我在表示word [counter]的部分發生錯誤,說它不是下標值。我能做些什麼來完成這項工作?還有什麼我做錯了嗎?

+3

'炭字;'是char不陣列!!? –

+0

'char word'說'word'是一個字符。 'char word []'將使單詞成爲'array'。 –

+0

我會推薦'flag = 0; break;'而不是在'for'條件下測試。它讓讀者更容易閱讀你的代碼。已經指出你沒有正確使用字符數組。也不知道你爲什麼要打印'[counter]'和'[length-counter]',但與'[length-counter-1]'比較。當'counter == 0'時前者會超出範圍(因爲最後一個有效元素是'[length-1]'。 – Floris

回答

2

這個char word;不是數組。這char word[100];是一個數組。你也可以使用scanf("%c", &word);來讀一個單個字符而不是一個單詞(如在一個字符串或一系列字符中)。用途:

fgets (word , 100 , stdin) 

而且length沒有初始化,所以它會導致UB。

+0

不需要明確重複數組的長度,你可以改爲:'fgets(word,sizeof word,stdin)' –

0

在你的程序中做這個修改,它會運行正常。

#include <stdio.h> 
#include <string.h> 
int main() 
    { 
    char word[100]; 
    int length, counter; 

    printf("Please enter a word: "); 
    scanf("%s",word); 
    length=strlen(word); 
    int flag = 1; 

    for(counter = 0; counter < length/2 && flag; counter++) 
     { 
     if (word[counter] != word[length-counter-1]) 
     { 
      flag = 0; 
      break; 
     } 
    } 
    if (flag) 
    { 
     printf("%s is a palindrome!\n", word); 
    } 
    else { 
     printf("%s is NOT a palindrome\n!", word); 
    } 
} 
+0

當你輸入一個長度超過100個字符的單詞時,它會發生緩衝區溢出,請使用'scanf('%100s',word)' –

-2
**************************************************************** 
*    Simple Array Palindrome Program     *        
****************************************************************/ 
#include <iostream> 
using namespace std; 
int main(){ 
int arr_size; 
int flag=0; 
/***************************************** 
*    Array Size    * 
*****************************************/ 

cout<<"Enter The Array Size: \n->arr["; 
cin>>arr_size;cout<<" ]"; 
int arr[arr_size]; 
/***************************************** 
*    User_Input    * 
*****************************************/ 


for(int i=0;i<arr_size;i++){ 
cout<<"Enter Value For Arr[ "<<i<<" ] -> "; 
cin>>arr[i]; 
} 
/***************************************** 
*   Palindrome_Check   * 
*****************************************/ 


for(int k=0,j=arr_size-1;k<arr_size && j>-1;k++) 
{ 

if(arr[i]==arr[j]; 
{ 
flag++; 
} 

} 
/***************************************** 
*    Flag Check    * 
*****************************************/ 


if(flag==arr_size) { 
cout<<"Array Is Palindrome: "; 
} 
else 
{ 
cout<<"Array Is Not Palindrome: "; 
} 


} 
+0

不確定C編譯器會喜歡'ostream's和'namespace's – Quentin

+1

首先,提供C++代碼作爲標記爲C的問題的答案是錯誤的,但除此之外,請避免提供僅用於代碼的答案,而是嘗試解釋您的代碼如何解決OP的問題沒有人願意通過你的代碼來弄清楚你可以如何輕鬆地將你的答案放在上下文中做了什麼。 –