2016-11-06 37 views
0

我發現這樣的功能,修改了一下,但它似乎輸出argumnets出現最多,但我試圖使它輸出最少出現字符。出現最少的字符

void leastOften(int *s) { 
     int i, j; 
     int min[256] = {0} ; 
     int min_count = 1000; 
     for (i=0; i<256; i++) { 
      if (s[i]) { 
       if (s[i] < min_count) { 
        for (j=0; j<256; j++) 
         min[j]=0; 
        min[i]=1; 
        min_count = s[i]; 
       } // 2nd_if 
       else if (s[i] == min_count) 
        min[i]=1; 
      } // 1st_if 
     } //1st_for 
     printf("The least appearing characters are: "); 
     for (i=0; i<256; i++) { 
      if (min[i]) 
       putchar(i); 
     } //2nd_for 
    } 
+0

你重置循環過程中的'min'數組。那是故意的嗎? –

+0

@ Jean-FrançoisFabre是的,但我不知道它是否正確。我用'getchar()'傳遞一個字符,我試圖循環所有這些。 – NouName

回答

0

void leastOften(int *s)這個函數看着一個整數數組,你的意思是看一個字符數組。

請注意,有效的ASCII範圍介於0到128之間,並且在該範圍內有許多不會出現的字符。例如,它不太可能具有^字符,它的出現次數將爲零。將會有許多不會出現的字符,因此它們的編號最小。但你可能對這些角色不感興趣。你可能想'A'之間的範圍限制在'Z''a''z'

此功能查找其至少出現一次的人物,他們似乎最少的方式:

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

void least(char *buf) 
{ 
    int i; 
    int len = strlen(buf); 
    int counter[256]; 
    memset(counter, 0, sizeof(counter)); //initialize the counter 

    for (i = 0; i < len; i++) //find the occurence of each letter 
     counter[(unsigned char)buf[i]]++; 

    int min = 0xFFFF; //assing to a large number 
    for (i = 0; i < 256; i++) 
     if (counter[i] && counter[i] < min) 
      min = counter[i]; 

    printf("character(s) which appear once, and the least often:\n"); 
    for (i = 0; i < 256; i++) 
     if (counter[i] && counter[i] == min) 
      printf("%c ", (char)i); 
    printf("\n"); 
} 

int main() 
{ 
    least("ABBCCDDEEFGG"); 
    return 0; 
} 
+0

@BUEPIXY的好處,改變了它 –

相關問題