我有一个函数compress2d(),它将二进制数据的二维数组(10x10)作为输入,通过用0或1替换0或1的每次运行来压缩数组的每一行,并且它发生的次数,并在每一行上打印压缩的结果。例如,具有数据0011100011的行可以被压缩为02130312。
例如:
输入:
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1
期望的输出:
1 5 0 5
0 5 1 5
1 5 0 5
0 5 1 5
1 5 0 5
0 5 1 5
1 5 0 5
0 5 1 5
1 5 0 5
0 5 1 5
但我得到了:
1 5
1 4
1 4
1 4
.
.
.
.
1 4
这是我的代码:
void compress2D(int data[SIZE][SIZE])
{
int i,j=0, target, count=1, location=1;
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
if (data[i][j] == data[i][j+1] && (j+1) < 10)
count++;
else {
data[i][location] = count;
data[i][location+1] = data[i][j+1];
count = 1;
location +=2;
}
}
data[i][location] = '\0';
location = 1;
count = 0;
}
for (i = 0; i < SIZE;i++) {
for (j = 0; data[i][j] != '\0'; j++) {
printf("%d ", data[i][j]);
}
printf("\n");
}
}
答案 0 :(得分:0)
'\0
'与0
相同。您永远不会在压缩数组中看到0
值,因为打印循环在data[i][j] == '\0'
时停止,与data[i][j] == 0
相同。您需要使用压缩数据中可能不存在的值来表示行的结尾。您可以使用SIZE+1
,因为最大可能的运行是SIZE
个相同值的副本。
所以改变:
data[i][location] = '\0';
为:
data[i][location] = SIZE+1;
并改变:
for (j = 0; data[i][j] != '\0'; j++)
为:
for (j = 0; data[i][j] != SIZE+1; j++)