2014-12-06 77 views
0

我無法找到下面的anagram程序中的錯誤。在anagram程序中找不到錯誤

#include<stdio.h> 
#include<string.h> 
#include<malloc.h> 

int is_anagram(char* s1, char* s2){ 
     int i; 
     char count[256] = {0}; 
     if(NULL == s1 || NULL == s2) return 0; 
     for(i = 0; (s1[i] && s2[i]); i++){ 
       count[s1[i]]++; 
       count[s2[i]]--; 
     } 
     if(s1[i] && s2[i]) return 0; 
     for(i = 0; i < 256; i++) 
       if(count[i]) return 0; 

     return 1; 
} 

int main(){ 
     int i; 
     char* cases = malloc(10); 
     char* str = malloc(500000); 
     char* str1; 
     char* str2; 
     if(NULL == cases || NULL == str) return 0; 
     fgets(cases,10,stdin); 
     for(i = 0; i < atoi(cases); i++){ 
       fgets(str,500000,stdin); 
       str1 = strtok(str," "); 
       str2 = strtok(NULL," "); 
       if(NULL == str1 || NULL == str2){ 
       printf("\nNO"); 
       return 0; 
       } 
       if(is_anagram(str1,str2)){ 
         printf("\nYES"); 
       } 
       else{ 
         printf("\nNO"); 
       } 
     } 
     free(str); 
     return 0; 
} 

我試圖驗證輸入的數字是否是一個anagram或不。

我輸入查詢3串findour其是否字謎與否

I/P: ABC美國廣播公司 - 是 ABC BA - NO A1B2C3 ABC123 - YES

我不能讓正確的O/P爲一些I/P的像第二個字符串與很多空格。 如何優化這進一步

+1

你爲什麼認爲它效率不高?哪些具體的代碼? – SMA 2014-12-06 11:57:24

+1

爲什麼你想優化不正確的代碼? – luk32 2014-12-06 12:01:33

+1

如果它沒有爲某些輸入生成正確的結果,也許應該在調試器下運行它,以便處理其中一個失敗的輸入。 – 2014-12-06 12:35:46

回答

0

目前,這條線是無用的(始終爲false):

if(s1[i] && s2[i]) return 0; 

什麼你大概的意思是:

if(s1[i] || s2[i]) return 0; 

而且,您的代碼使用的可能性由於您使用帶符號的字符作爲數組索引,所以在您的count數組中使用負數索引。然而,在正常的ASCII輸入中,你沒問題。