C程序:如何找到字符串中字符的最大/最小频率

C程序:如何找到字符串中字符的最大/最小频率,c,string,character,frequency,C,String,Character,Frequency,我试图找到一种方法来获取字符串中字符的max/min freq值 帮助我 最大频率为2,最小频率为1 (有2个e,还有其他字母出现一次) 另一个例子,例如aaaa 最大频率为4,最小频率为4 我正试图对此进行编程,但我不知道在使用scanf收到字符串后该怎么做 假设只有小写字母,单词之间没有空格 此外,我更喜欢蛮力搜索,而不是由类型转换之类的优雅解决方案。刚开始使用C,请尽量简单。顺便说一句,我不介意这只是一个建议或一个基本的程序如何做到这一点。我不一定需要完整的代码 提前感谢您需要建立一个直方

我试图找到一种方法来获取字符串中字符的max/min freq值

帮助我

最大频率为2,最小频率为1 (有2个e,还有其他字母出现一次)

另一个例子,例如aaaa

最大频率为4,最小频率为4

我正试图对此进行编程,但我不知道在使用scanf收到字符串后该怎么做

假设只有小写字母,单词之间没有空格

此外,我更喜欢蛮力搜索,而不是由类型转换之类的优雅解决方案。刚开始使用C,请尽量简单。顺便说一句,我不介意这只是一个建议或一个基本的程序如何做到这一点。我不一定需要完整的代码


提前感谢

您需要建立一个直方图:

size_t histogram[UCHAR_MAX] = { 0 };     // allocate and initialise histogram

for (size_t i = 0; s[i] != '\0'; ++i)    // generate histogram for string s
{
    histogram[(unsigned int)s[i]]++;
}

在此之后,您可以通过直方图进行线性扫描,查找最小和最大字母频率。

您需要构建直方图:

size_t histogram[UCHAR_MAX] = { 0 };     // allocate and initialise histogram

for (size_t i = 0; s[i] != '\0'; ++i)    // generate histogram for string s
{
    histogram[(unsigned int)s[i]]++;
}

在此之后,您可以通过直方图进行线性扫描,查找最小和最大字母频率。

如果
s
char*
那么请小心,
char
可能会被签名。没错-我打算对此保持沉默-我想我必须添加一个混乱的演员阵容…;-)当然,没有人说这在任何方面对性能至关重要,但仍然。。。看到这样使用
strlen()
是很可怕的,因为它将线性时间算法变成了二次型。@放松:是的,在为初学者编写示例代码时,在简单性和最佳实践之间进行权衡总是很困难的。理论上,虽然编译器可以在循环外优化对strlen的调用,但我相信。我现在已经取出了strlen。如果
s
char*
那么小心,
char
可能会被签名。是的-我打算对此保持沉默-我想我必须添加一个混乱的演员阵容…;-)当然,没有人说这在任何方面对性能至关重要,但仍然。。。看到这样使用
strlen()
是很可怕的,因为它将线性时间算法变成了二次型。@放松:是的,在为初学者编写示例代码时,在简单性和最佳实践之间进行权衡总是很困难的。理论上,虽然编译器可以在循环外优化对strlen的调用,但我相信。我现在已经把斯特伦拿出来了。