出现次数最少的人物

时间:2016-11-06 21:01:59

标签: c if-statement for-loop

我找到了这样一个功能,对它进行了一些修改,但它似乎输出了最多出现的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
    }

1 个答案:

答案 0 :(得分: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;
}