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