【问题标题】:Problem with iteration on array in For loopFor循环中数组的迭代问题
【发布时间】:2020-06-09 08:10:34
【问题描述】:

我在数组和循环相关的问题上遇到了很长时间的麻烦。

假设一个数组如下:

int arr[] = {2, 3, 5, 3, 6, 8, 10, 1, 9};

程序应该打印expected 列,如图所示(注意该表是为了澄清我真正想要实现的目标):

max:  expected    arr[index] for max
------------------------------------
 2 :  3 5         value of: arr[0]
 3 :  6, 8, 10    value of: arr[3]
 1 :  9           value of: arr[7]

这是我迄今为止尝试过的:

#include <iostream>

int main(void) {
    int arr[] = {2, 3, 5, 3, 6, 8, 10, 1, 9};
    int max = arr[0];
    int i = 1, it = i;

    for (; i <= max; i++) {
        if (i == max) {
            std::cout << arr[i] << std::endl;
            max = arr[it + 1]; // when loop end has come, increment max to next element value
            it = i + 2; // incrementing iterator by 2 next element position (after max)

        } else {
            std::cout << arr[i] << ' '; // when loop is executing
        }
    }

    return 0;
}

它实际打印的出乎意料 V/S 它应该打印什么:

3 5    |  3, 5
3 6 8  |  6, 8, 10
10 1 9 |  1, 9
10     |  <nothing>

程序即将获取最大值并打印下一个元素,直到max值达到元素位置的数量。

问题出在哪里以及如何解决?请告诉我。

【问题讨论】:

  • 你把键和值放在同一个锅里……这是破解代码的完美秘诀……

标签: c++ arrays for-loop


【解决方案1】:

所以我重写了你的代码,坦率地说我无法遵循它,它似乎与似乎有点偏离的变量名称有点混淆。

这里有一些工作代码。代码中的两个关键概念是每个块的开始位置(变量start)和每个块的大小(变量count)。另外,我使用整个数组的大小sizeof(arr)/sizeof(arr[0]) 来终止外循环。您的代码中不存在的东西。如果您使用的是 C++17,则可以使用 std::size(arr) 而不是 sizeof

int main(void) {
    int arr[] = {2, 3, 5, 3, 6, 8, 10, 1, 9};

    size_t start = 0;
    while (start < sizeof(arr)/sizeof(arr[0]))
    {
        int count = arr[start];
        for (int i = 0; i < count; ++i)
        {
            std::cout << arr[start + i + 1] << ' ';
        }
        std::cout << std::endl;
        start += count + 1;
    }
}

输出是

3 5
6 8 10
9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 2018-03-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2020-05-19
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多