我有点卡在一段代码上,我希望我能在这里获得一些见解。
基本上我正在读取输入文件,抓取位值并存储它们。在2D数组中。
我想要完成的是找到2D数组中每个字符串的出现次数。
例如,以下是存储在2d数组sortBuffer[][]
111000101
110000101
111110000
101011000
000000010
101001000
所以我需要完成的是创建一个计数数组,它会告诉我111000101
中出现110000101
或sortBuffer
的次数。
因为它是我正在使用的2D数组,所以我不确定如何比较整个字符串。任何有关这方面的帮助将不胜感激。提前谢谢大家。
作为一个额外的步骤,我需要按位值组织数组,从
开始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`.
答案 0 :(得分:0)
以下是计算频率并对数据进行排序的示例,其中宽度为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开始,然后对于数字中的每个位,我们将值向左移一位并添加当前位。在循环结束时,所有位都已移入,并且我们有一个包含所有位的整数。我们使用它作为freqency数组的索引并在该索引处递增值 - 该值是该值存在的次数的计数。
在第二个for循环中,我们遍历频率数组,并且每个值打印出我们需要的数字的副本。由于我们从索引0开始,因此我们将按排序顺序自动打印它们。棘手的部分是从一个整数打印一位 - 基本上你需要掩盖你想要的位&amp;然后把它转移到那个地方。例如,要获得V的第四位,您需要(V & (1 << 3)) >> 3
与(V & (1 << (4-1))) >> (4-1)
相同,在我们的情况下index
是值,print
是位。