【问题标题】:C Arrays and unbroken listsC 数组和完整列表
【发布时间】:2009-03-03 17:30:45
【问题描述】:

/edit:到目前为止,感谢您的帮助,但是我没有任何解决方案来获取示例输入并提供示例输出。我的描述不是很清楚,抱歉。

我有一个由二进制数据组成的数组。我想要做的是确定每个完整的 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;
        }
    }
}

【问题讨论】:

  • 您的示例输出 (0100110) 显示 count >= 3,但您的代码和文本显示 (count > 3)。
  • 是的,这很混乱,让原始发布者准确地整理出他想要的东西。
  • 是的,它应该是 >= 3。我为了一个更简单的例子而改变了它,但我忘了做那个改变。谢谢!

标签: c arrays


【解决方案1】:

这样可以吗?

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++;
}

【讨论】:

  • 您忘记写最后一个元素(例如,在 binaryArray[998] == binaryArray[999] 的情况下),但除此之外它看起来还不错。
  • 无论如何最好将其重写为 [x-1] ... [x]。谢谢
  • 没问题。我刚刚看到它是因为它是我写的典型错误之一(忘记最后一个极端情况):-)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    修改@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);
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2021-10-21
      相关资源
      最近更新 更多