压缩2D数组

时间:2018-02-14 05:32:40

标签: c

我想从以下输入压缩二维数组

Enter the array size (rowSize, colSize):
4 4
Enter the matrix (4x4):
1 1 1 0
0 0 1 1
1 1 1 1
0 0 0 0

指定了1和0的数量。

compress2D():
1 3 0 1
0 2 1 2
1 4
0 4 

以下是我的代码

void compress2D(int data[SIZE][SIZE], int rowSize, int colSize)
{
int i , j , counter = 0, tempInt = data[0][0];
for (i = 0 ; i < rowSize ; i++)
{
    for (j = 0 ; j < colSize ; j++ )
    {
        if (data[i][j] == tempInt) 
            counter++ ; 
        else
        {
            printf("%d %d " , tempInt,counter);
            tempInt = data[i][j];
            counter = 1;

        }   
    }
    if(counter!=0)
        printf("%d %d",tempInt, counter);
    counter = 0 ;
    printf("\n");
}
}

然而这是我的输出

compress2D(): 
1 3 0 1
0 2 1 2
1 4
1 0 0 4

所有输入都是二进制

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码。看到它正常工作here

void compress2D(int data[SIZE][SIZE], int rowSize, int colSize)
{
    int i , j , counter, tempInt;
    for (i = 0 ; i < rowSize ; i++)
    {
        tempInt = data[i][0];
        counter = 1;

        for (j = 1 ; j < colSize ; j++ )
        {
            if (data[i][j] == tempInt) 
                counter++ ; 
            else
            {
                printf("%d %d " , tempInt,counter);
                tempInt = data[i][j];
                counter = 1;
            }   
        }
        if(counter)
            printf("%d %d",tempInt, counter);
        printf("\n");
    }
}

注意:在OP的最后评论( 0 1 1 2 0 1之后更新,在某些情况下输出将比输入本身更长。)

答案 1 :(得分:1)

如评论中所述,每次开始新行时都需要重置tempInt

void compress2D(int data[SIZE][SIZE], int rowSize, int colSize)
{
    int i, j, counter = 0, tempInt = data[0][0];
    for (i = 0; i < rowSize; i++)
    {
        tempInt = data[i][0];                        // <--------

        for (j = 0; j < colSize; j++)
        {
            if (data[i][j] == tempInt)
                counter++;
            else
            {
                printf("%d %d ", tempInt, counter);
                tempInt = data[i][j];
                counter = 1;

            }
        }
        if (counter != 0)
            printf("%d %d", tempInt, counter);
        counter = 0;
        printf("\n");
    }
}