2017-10-07 5 views
2

이진 데이터의 2 차원 배열 (10x10)을 입력으로 사용하고 각 0 또는 1을 0 또는 1로 대체하여 배열의 각 행을 압축하는 compress2d() 함수가 있습니다. 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 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 

하지만 점점 오전 :

예를 들어, 데이터 0,011,100,011와 행 02130312.

등으로 압축 될 수있다

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

하면이 시도 ericlippert.com/2014/03/05/how-to-debug-small-programs/ 및 https://stackoverflow.com/questions/2069367/how-to-debug-using-gdb – Yunnosch

+0

어떻게 압축하겠습니까 '1010101010' ? 당신의 논리에 따르면 실제로 이것을 다음과 같이 확장했을 것입니다 :'11011101110111011101' (<순서가 완벽하지는 않지만 생각이납니다.) – babon

+0

'data [i] [j +1]'과'j == SIZE-1'을 사용합니다. – Barmar

답변

0

'\0가 '0과 동일 : (210)은 여기 내 코드입니다. 인쇄 루프가 data[i][j] == '\0' 일 때 data[i][j] == 0과 같을 때 중지하기 때문에 압축 배열에서 0 값을 볼 수 없습니다. 행의 끝을 알리기 위해 압축 된 데이터에 존재할 수없는 값을 사용해야합니다. 가능한 가장 큰 실행은 동일한 값의 SIZE 사본이므로 SIZE+1을 사용할 수 있습니다.

그래서 변경 :

data[i][location] = '\0'; 

에 :

data[i][location] = SIZE+1; 

변경 :

for (j = 0; data[i][j] != '\0'; j++) 

에 : HTTPS : //

for (j = 0; data[i][j] != SIZE+1; j++) 
+0

나에게 설명해 주셔서 고맙습니다. 지금은 훨씬 더 명확 해. 그것은 변수 num을 선언해야한다는 것을 의미합니까? @barmar – Denise

+0

죄송합니다. 'SIZE'을 의미합니다 (다른 질문을 생각해봤을 것임). – Barmar