一段代码没有给出我需要的答案。建议编辑?

时间:2014-08-11 04:26:37

标签: c++ networking

该代码应该检查输入数组的连续五个' 1如果找到,它应该添加一个' 0'最后作为简单奇偶校验位检查器的奇偶校验位。

这是代码。

#include <conio.h>
#include <stdio.h>
#include <iostream>

using namespace std;

int main() {
    int n, a[30], b[5] = {1, 1, 1, 1, 1}, temp = 0, count = 0;
    cout << "Enter the size of input bits :";
    cin >> n;
    cout << endl;
    cout << "Enter the input bits :";
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = n; i >= 0; i--) {
        if (i >= 4) {
            temp = i;
            for (int j = 0; j < 5; j++) {
                if (a[temp] == b[j]) {
                    temp++;
                    count++;
                }
            }
        }
    }
    if (count == 4) {
        n = n + 1;
        a[n] = 0;
    }
    cout << endl << endl;
    for (int i = 0; i < n; i++) {
        cout << a[i];
    }
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:0)

以下是您想要实现的简单逻辑..让我们说输入数组为a,其长度为n

int counter = 0;

for(int i=0; i<n; i++) {
    if(a[i] == 1)
        counter++;

    else
        counter = 0; //need to start looking for 1's again because consecutive stream is broken

    if(counter == 5) {
        a[i+1] = 0;   //found 5 consecutive 1's so next bit will be 0
        i++;          //don't need to check the next bit which is already 0
        counter = 0;  //resetting counter
    }
}

上面的代码会将数组[2,3,1,1,1,1,1,3,4,5]更改为 - &gt; [2,3,1,1,1,1,1,0,4,5]

如果您想在数组末尾插入0,只需将a[i+1] = 0更改为a[n+1] = 0并删除i++;

您还需要确保n不大于数组的大小。

答案 1 :(得分:0)

我会从头开始逐行:

  1. for(int i=n; i>=0; i--)更改为for (int i = n-1; i >= 0; i--)(C ++中的n大小数组的单元格范围为[0,n-1])
  2. if(i>=4)更改为if (n >= 5)
  3. temp++放在if(a[temp]==b[j]){}之后,而不是放在其中。
  4. 添加

    if (count == 5) break;
    else count = 0;
    

    for(int j = 0; j < 5; j++)循环

  5. 之后
  6. 变化

     if(count==4)
     {
         n=n+1;
         a[n]=0;
     }
    

    if(count == 5){
      a[n] = 0;
      n = n+1;
    }
    

    再一次! n大小的数组在位置0到n-1上保存n个元素 当然序列在上面有所不同! 您也可以将其写为if (count == 5) a[n++] = 0;

    这就是全部。