从 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 处理器和无限内存的设备上 运行 优化的功能。
算法大纲如下:
- 声明一个 256 元素的整数数组(选择您的大小),将其归零。
- 循环字符串:
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;
}
如何编写一个函数的实现,该函数将 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 处理器和无限内存的设备上 运行 优化的功能。
算法大纲如下:
- 声明一个 256 元素的整数数组(选择您的大小),将其归零。
- 循环字符串: 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;
}