C阵列和不间断的列表

时间:2009-03-03 17:30:45

标签: c arrays

/编辑:感谢目前为止的帮助,但是我没有任何解决方案来获取样本输入并提供样本输出。我的描述并不是最清楚,抱歉。

我有一个由二进制数据组成的数组。我想要做的是确定每个不间断的1或0段的长度。

说我有这些数据:

0111010001110

在我需要翻译成的数组binaryArray中:

0100110

存储在nwArray中,其中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;
        }
    }
}

3 个答案:

答案 0 :(得分: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++;
}

答案 1 :(得分:3)

你遇到的一个问题是你过早地将计数与3进行比较。等到你看到比特流发生了变化。尝试一下while循环,直到该位翻转然后比较计数。

答案 2 :(得分: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);