给定一个二进制数,例如“ 100001111111110000001”,其中每个位都放置在数组中,以便该数组如下所示:
[1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1]
我想找到任何1序列的开始索引和结束索引。
所需的输出(从右到左读取):
起始索引= 0
结束索引= 0
(获取此数字并相应地执行操作)
然后:
起始索引= 7
结束指数= 15
(获取此数字并相应地执行操作)
最后一次出现-
起始索引= 20
结束指数= 20
(获取此数字并相应地执行操作)
如何在C语言中完成所需的输出?
附加我尝试过的代码:
for (int i = 0; i< counter; i++) {
if (bitArray[i] == 0) {
while (bitArray[i] == 0) {
startP++;
endP++;
i++;
}
}
if(bitArray[i] == 1) {
startP++;
while(bitArray[i+1]==1) {
endP++;
i++;
}
}
if (endP == startP) {
//do something
} else if (endP == (startP + 1)) {
//do something
} else if (endP > (startP + 1)) {
// do something
}
endP++;
startP = endP;
}
* counter =数组的len
* endP和startP int,已插入。
* bitArray如所述数组。
最佳答案
我不知道您的代码应该做什么,但是,如果您只想打印一组1的开始和结束索引,我会做一些更改:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char msg[64];
int bitArray[] = {1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1};
int inSet = 0;
int start;
int end;
for (int i = 0; i < sizeof(bitArray); i++) {
if (bitArray[i] == 1 && inSet == 0) {
inSet = 1;
start = i;
}
else if(bitArray[i] == 0 && inSet == 1) {
inSet = 0;
end = i - 1;
snprintf(msg, sizeof(msg), "-starting index = %d\n-ending index = %d\n", start, end);
printf(msg);
}
}
if(inSet == 1)
{
end = sizeof(bitArray) - 1;
snprintf(msg, sizeof(msg), "-starting index = %d\n-ending index = %d\n", start, end);
printf(msg);
}
}
关于c - 在C中-1的计数序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59228907/