2013-04-24 47 views
-5

這是我的代碼來查找數組中最常用的字符。請調試它,並確定錯誤。它大部分時間都在工作,但在某些情況下輸出不正確。請幫我這個查找數組中最常用的字符?

#include <stdio.h> 
#define size 100 
int main() 
{ 
char a[size]={0}; 
int i,j, k, n; 
char c, e; 

printf("enter size of array\n"); 
scanf("%d", &n); 
a[n]=0; 

printf("enter the characters??\n"); 

for(i=0; i<n; i++) 
    { 
    scanf(" %c", & a[i]); 
    } 


for(j=0; j<n; j++) 
{ 
for(k=0; k<n; k++) 
    { 
    if(j==k) 
     { 
     continue; 
     } 

     else if(a[j]=a[i]) 
      { 
       e=a[j]; 
      } 
     else if(a[j]!=a[k]) 
      { 
      continue; 
      } 
    } 
} 
printf("the most frequently occuring character is %c", e); 
return 0; 
} 
+5

「調試並識別錯誤。」編號 – BNL 2013-04-24 18:07:31

+0

atleast告訴我哪裏出錯了 – 2013-04-24 18:10:19

+0

你看到了什麼錯誤,你做了什麼來嘗試調試它? – 2013-04-24 18:11:48

回答

2

爲了好玩,用您自己的風險功課:


int count[256]; 
const char input[] = "hjkshrjkhsfh2389r2jhfjkjfljsdjklf"; 

int main() 
{ 
    int i; 
    for(i=0; input[i]; i++) 
    { 
     count[input[i]]++; 
    } 

    int best = 0; 
    char letter = 0; 

    for(i=0; i&lt256; i++) 
    { 
     if(count[i] > best) 
     { 
      best = count[i]; 
      letter = (char)i; 
     } 
    } 

    printf("letter: %c, best: %d\n", letter, best); 

    return 0; 
} 

要使它成爲一個教訓,這裏有事情,都做了「壞」這裏說的真實世界將讓你在煩惱:

  • 魔術數字256來代表所有的字節大小
  • 我輸入strlen的檢查是非常不安全的。
  • 不處理「巨大」列表 - 僅允許2^31次出現。
  • O(strlen)+ O(256)= O(n)時間 - 可能有所改善。
  • i重複使用,而不是作用域。 Var名稱可能更具描述性。
  • 沒有評論...

享受和其他人都歡迎BBQ我要放棄一門功課水平的答案是這樣的。只是想看看我能多快把它放在一起。