2009-03-03 86 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);