2016-11-06 10 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であり、その範囲内に決して発生しない文字が多数あることに注意してください。たとえば、^という文字はありませんが、その発生はゼロになります。出現しない多くの文字が存在するため、最も小さい数字が表示されます。しかし、あなたはおそらくそれらの文字に興味がありません。あなたは、この機能は、少なくとも一度表示された文字を探し、そして、彼らは少なくとも、多くの場合、表示され

など 'z''Z'から 'A''a'間の範囲を制限する場合があります

#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

@BLUEPIXYのポイントが変更されました –

関連する問題