0

在我正在编写的程序中,我目前有一个遍历数组的 for 循环num[5],并检查该数组中是否有任何 1,如下所示:

int counter = 0;
for (int i = 1; i <= 5; i++)
    if (num[i] == 1)
        counter++;

这很成功,但我现在正试图通过数组并查看程序中 1 的索引是什么。所以,如果我有01001,我想创建一个包含 1 位置的数组。以下是我迄今为止尝试过的:

int b[counter];
for (int k = 0; k <= counter; k++) {
   for (i = 0; i <= 5; i++) {
      if (num[i] == 1) {
          b[k] = i;
      }
    }
}

但这不会产生预期的结果。当我输入字符串时,比如说1001,我得到444. 有人可以告诉我我做错了什么吗?

4

2 回答 2

1

对于 的每个值k,对于每次出现的 a 1,您将设置b[k]为 的索引1。因此每个b[k]都有最后一个的索引1

尝试:

int b[counter];
int k = 0;
for (i = 0; i <= 5; i++) {
   if (num[i] == 1) {
       b[k++] = i;
   }
}

因此,每当它获得 a 时1,它都会分配b[k]给索引,然后增加k

那么你也应该在尝试打印时使用k,而不是。counterb

于 2013-09-16T00:44:20.417 回答
0

问题在于您的这部分代码。

int b[counter];
for (int k = 0; k <= counter; k++) {
   **for (i = 0; i <= 5; i++) {
      if (num[i] == 1) {
          b[k] = i;
      }**
    }
}

假设您在数组1的索引处获得 a,如. 您分配 这是完全有效的。但是随着循环的继续,您会在 index 处获得另一个。因此再次执行该命令。请注意,您的值在两个语句中都是恒定的,因此您将数组 b 作为。101001b[k] = 1;14b[k] = 4;k44

所以你需要做的是在你得到一个1.

这是修改后的代码。您还需要跟踪迭代器i,我在这里使用变量- 完成了该操作new_pos // new position

int b[counter];
int new_pos=0;  //to keep track of the iterator
for (int k = 0; k <= counter; k++) {
   for (i = new_pos; i <= 5; i++) {
      if (num[i] == 1) {
          b[k] = i;
          new_pos = i+1;
          break;
      }
    }
}

Dukeling提供的代码也很完美,但我只是提供另一种方法来让您自己的代码工作。

于 2013-09-16T05:01:15.357 回答