2014-12-30 93 views
0

我對C很新,所以我想要一些建議。有沒有更簡單的方法來編寫這個C代碼?

此代碼正在查看單詞是anagrams還是no。代碼威脅大寫輸入與小寫輸入相同,並且忽略輸入字符不是字母。最後它應該和它顯示的是單詞anagrams或no。

我想知道有沒有一種更簡單的方法來編寫這段代碼,或者這是非常多的嗎?

int alphabet[26] = {0}, sum = 0; 
char first[20], second[20]; 
int i = 0; 

printf("Enter the first word: "); 
do 
{ 
    first[i] = getchar(); 
    if(isalpha(first[i])) 
    alphabet[toupper(first[i]) - 'A'] += 1 ; 
    i++; 

}while(first[i - 1] != '\n'); 

printf("Enter the second word: "); 
i = 0; 
do 
{ 
    second[i] = getchar(); 

    if(isalpha(second[i]) && alphabet[toupper(second[i]) - 'A'] > 0) 
    { 
     alphabet[toupper(second[i]) - 'A'] -= 1; 
    } 
    i++; 

}while(second[i - 1] != '\n'); 

for(i = 0; i <= 26 - 1; i++) 
{ 
    sum += alphabet[i]; 
} 
if (sum == 0) 
    printf("Anagrams\n"); 
if (sum != 0) 
    printf("Not anagrams\n"); 

我沒有一個編輯,在第二輸入我拿出的,如果條件之一,現在它看起來像這樣

do 
{ 
    second[i] = getchar(); 

    if(isalpha(second[i])) 
    { 
     alphabet[toupper(second[i]) - 'A'] -= 1; 
    } 
    i++; 
+1

你應該張貼到[codereview.se。但是,這絕對可以簡化。 – Quentin

+2

第一個單詞'abc',第二個單詞'abcabc',會導致不正確的字謎匹配。在處理第二個單詞時,如果任何字母的字母數爲0,那麼這些單詞不是字謎。 – JS1

+5

挑剔:C程序通常不是[* scripts *](http://en.wikipedia.org/wiki/Scripting_language)。 –

回答

3

您的代碼是不正確的:它認爲「a」和「 ac「作爲anagrams,由於錯誤的計數邏輯。我固定的,並有利於存儲只是最近輸入字符去掉整個firstsecond詞的存儲:

#include <stdio.h> 
#include <ctype.h> 

int main(void) 
{ 
    int alphabet[26] = {0}; 
    int ch; 
    int i; 

    printf("Enter the first word: "); 
    do 
    { 
    ch = getchar(); 
    if(isalpha(ch)) 
     alphabet[toupper(ch) - 'A']++; 
    }while(ch != '\n'); 

    printf("Enter the second word: "); 
    do 
    { 
    ch = getchar(); 
    if(isalpha(ch)) 
     alphabet[toupper(ch) - 'A']--; 
    }while(ch != '\n'); 

    for(i = 0; i < 26; i++) 
    { 
    if (alphabet[i]) 
    { 
     printf("Not anagrams\n"); 
     return 0; 
    } 
    } 

    printf("Anagrams\n"); 
    return 0; 
} 
+0

謝謝,我修復了這個錯誤。如果我在某些時候應該打印它們,我有用於這些文字的數組。 – TacoCat

+0

它似乎忽略了一個非alpha字符的輸入。我懷疑這不是正確的行動。如果輸入非alpha字符,則退出當前while循環 – user3629249

相關問題