从 C 上的 ASCII 字符中检测最频繁出现的符号

Detecting most frequently recurring symbol from ASCII-characters on C

如何编写一个函数的实现,该函数将 ASCII 字符序列作为输入,并给出最常出现的符号?我需要在 C 上制作它,我的问题在哪里?

  char mostFrequentCharacter(char* str, int size);



 char value;
 int valueCount = 0;
 for (int i =0; i < strlen(str); i++)
 {
       char oneChar = str[i];
       var totalCount = source.Split(oneChar).Length - 1;;
      if (totalCount >= valueCount)
      {
       valueCount = totalCount;
       value = oneChar;
      }
 }
  return value;

要在具有双核 ARM 处理器和无限内存的设备上 运行 优化的功能。

算法大纲如下:

  1. 声明一个 256 元素的整数数组(选择您的大小),将其归零。
  2. 循环字符串: 2a.使用每个字符作为数组的索引并递增元素。 2b.如果递增的元素是迄今为止最大的记录索引。

全部通过字符串一次完成。存储 256 * 整数字节的大小,但你有 "infinite memory" 相比之下微不足道;-)

如果内存不是您所说的问题,那么您应该创建查找 table,您将在其中存储每个字符的出现次数。由于输入是 ASCII 字符序列,结构的大小应为 256。检查输入并初始化查找后 table,在主 for 循环中,增加查找中相应位置的出现次数 table ,检查出现次数是否超过当前最大计数,如果是,则更新当前最大计数和当前最频繁出现的字符。最后,只有 return 个出现频率最高的字符。此解决方案的时间复杂度为 O(N) 和 space 复杂度 O(1).

char mostFrequentCharacter(char* str, int size) {
    char mosfFrequent;
    int counts[256], i, maxCount = 0;

    // in the case of invalid input, return some invalid character
    if(!str || size < 1)
        return '[=10=]';

    for(i = 0; i < 256; i++)
        counts[i] = 0;

    for (i = 0; i < size; i++)
    {
        counts[str[i]]++;

        if(counts[str[i]] > maxCount) {
            maxCount = counts[str[i]];
            mostFrequent = str[i];
        }
    }
    return mostFrequent;
}