该代码应该检查输入数组的连续五个' 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;
}
答案 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)
我会从头开始逐行:
for(int i=n; i>=0; i--)
更改为for (int i = n-1; i >= 0; i--)
(C ++中的n大小数组的单元格范围为[0,n-1])if(i>=4)
更改为if (n >= 5)
temp++
放在if(a[temp]==b[j]){}
之后,而不是放在其中。添加
if (count == 5) break;
else count = 0;
在for(int j = 0; j < 5; j++)
循环
变化
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;
这就是全部。