gpt4 book ai didi

C 计算二维数组中字符串的频率

转载 作者:行者123 更新时间:2023-11-30 17:01:21 24 4
gpt4 key购买 nike

我有点卡在一段代码上,希望我能在这里得到一些见解。

本质上,我正在读取输入文件,抓取位值并存储它们。在二维数组中。

我想要完成的是查找二维数组中每个字符串出现的次数。

例如,以下是二维数组中第一对条目中存储的内容sortBuffer[][]

111000101
110000101
111110000
101011000
000000010
101001000

所以我需要完成的是创建一个计数数组,它会告诉我 111000101110000101sortBuffer 中出现的次数.

由于我正在使用它是一个二维数组,因此我不太确定如何比较整个字符串。任何对此的帮助将不胜感激。提前谢谢大家。

作为附加步骤,我需要按位值组织数组,从

000000001
000000010
000000011
000000100 and so on...
<小时/>
int getBitVal(unsigned char *keyStrBin, int keyIndex) {

int keyMod = keyIndex % 8;
int keyIn = keyIndex / 8;

return (((keyStrBin[keyIn]) >> (7 - (keyMod))) & 1);
}

void test(FILE *inputFile) {
int nRead;
size_t fSize = size(inputFile);
unsigned char *inBuffer = malloc(fSize * sizeof (unsigned char));
memset(inBuffer, 0, fSize);

nRead = fread(inBuffer, 1, fSize, inputFile);

int h = 0;
int b = 0;
int m = 9
int n = 24720
char sortBuffer[m][n / m];

for (i = 0; i < fSize * 8; i++) {
sortBuffer[b][h] = getBitVal(inBuffer, i);
b++;
if (i % m == 0 && i != 0) {
b = 0;
h++;
}
}

//This is where I need to count the number of times any given string occurs within the `sortBuffer` `char`.

最佳答案

下面是计算频率并对数据进行排序的示例,其中宽度为 9 并且数据已经在数组中而不是从文件中读取:

#include <stdio.h>

int main()
{
int height=6;
int sortBuffer[6][9] = {
{1,1,1,0,0,0,1,0,1},
{1,1,0,0,0,0,1,0,1},
{1,1,1,1,1,0,0,0,0},
{1,0,1,0,1,1,0,0,0},
{0,0,0,0,0,0,0,1,0},
{1,0,1,0,0,1,0,0,0}
};
int freq[2<<9]={0};
int print, count, index, row, column, value;
// store the counts
for(row=0;row<height;row++)
{
for(value=0,column=0;column<9;column++) value=value*2+sortBuffer[row][column];
freq[value]++;
}
// print the numbers
for(index=0;index<(2<<9);index++)
{
for(count=freq[index];count>0;count--)
{
for(print=9;print>0;print--) printf("%d", (index & (1<<(print-1))) >> (print-1) );
puts("");
}
}
return 0;
}

在第一个 for 循环中,我们计算所有位的十进制数。我们从值 0 开始,然后对于数字中的每一位,我们将值左移一位并添加当前位。在循环结束时,所有位都已移入,并且我们有一个包含所有位的整数。我们使用它作为频率数组的索引,并增加该索引处的值 - 该值是该值存在的次数。

在第二个 for 循环中,我们运行频率数组,并为每个值打印出我们需要的数字的副本。由于我们从索引 0 开始,我们会自动按排序顺序打印它们。棘手的部分是从整数中打印一位 - 基本上你需要用 & 屏蔽你想要的位,然后将其下移到个位。例如,要获取 V 的第四位,您需要 (V & (1 << 3)) >> 3(V & (1 << (4-1))) >> (4-1) 相同在我们的例子中index是值和 print是位。

关于C 计算二维数组中字符串的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com