2009-03-03 65 views
1

/編輯:感謝迄今爲止的幫助,但是我沒有得到任何解決方案來接受示例輸入並給出示例輸出。我的描述不是最清晰的,對不起。我有一個數組組成的數組。我想要做的是確定每個1或0的不間斷段是多久。C陣列和不間斷的列表

說我有這樣的數據:

0111010001110 

在陣列binaryArray,我需要轉化爲:存儲在nwArray

0100110 

其中0表示窄(小於3位長)和1代表寬(> 3位數字)。我不關心二進制值,而是關心每個組件的長度。我不確定這個解釋是否合理。

這就是我的;它不工作,我可以看到爲什麼,但我想不出一個好的解決方案。

for(x=0;x<1000;x++){ 
    if(binaryArray[x]==binaryArray[x+1]){ 
     count++; 
     if(count>=3){ 
      nwArray[y]=1; 
      y++; 
      count=0; 
     } 
    }else{ 
     if(barcodeArray[x]){ 
      nwArray[y]=0; 
     } 
    } 
} 
+0

你的榜樣輸出(0100110)表示,計數> = 3,但你的代碼和文本說(計數> 3)。 – jfs 2009-03-03 17:40:38

+0

是的,這是令人困惑的,讓原始的海報正確地理清他想要的東西。 – 2009-03-03 17:55:58

回答

5

這樣做嗎?

int count = 0; 
for (x=0; x<1000;x++) 
{ 
    if (binaryArray[x] != binaryArray[x+1]) 
    { 
     if (count < 3) 
      nwArray[y]=0; 
     else 
      nwArray[y]=1; 

     y++; 
     count = 0; 
    } 
    else 
     count++; 
} 
3

您遇到的一個問題是您比較計數太早3。等到你看到比特流發生變化時。嘗試一段時間循環,直到翻轉位然後比較計數。

0

修改@MikeW's answer

int count = 0; 
int nwSize = 0;  
const int ilast = SIZEOF(binaryArray) - 1; 
for (int i = 0; i <= ilast; ++i) 
    if (i == ilast || binaryArray[i] != binaryArray[i+1]) { 
    nwArray[nwSize++] = (count > 1); /* true for '1110'; false for '110' */ 
    count = 0; 
    } 
    else 
    ++count; 
assert(count == 0);