难以理解循环如何与c ++中的数组交互[homework]

时间:2015-04-29 04:28:11

标签: c++ arrays loops for-loop

我的老师给了我们一个代码,用户输入一个最多10位的数字,每个数字都存储在一个数组中。我们需要以这样的方式对其进行格式化,即输出每个单独重复的数字。我尝试使用for循环来完成此操作,但是我很难理解循环如何与数组交互(或者至少,我认为我的麻烦来了从)。这就是我到目前为止......任何可以解释第44行和第50行之间for循环和数组交互的人都会感激不尽。

#include <iostream> // provides cin, cout, endl, fixed

using namespace std;

#define DIGITS 10 // number of Base 10 digits

int main()
{
    // declaration section

    int number,                 // number input by the user
        digit,                  // digit of number being processed
        digit_tally[DIGITS],    // keeps track of digits seen
        i;                      // general array-element counter

    // Initialize digit tally to all zeroes, indicating that no repeated digits have been found

    for (i = 0; i < DIGITS; i++)
    {
        digit_tally[i] = 0;
    }

    // input section

    cout << "Enter a number (any negative number to exit): ";
    cin >> number;

    // processing section

    while (number > 0) 
    {
        digit = number % 10;

        if (digit_tally[digit] == 0)
        {
            digit_tally[digit] = 1;

        }
        else if (digit_tally[digit] == 1)
        {
            cout << "Repeated digits: ";

            for (digit_tally[digit] = 1; digit_tally[digit] <= 10; digit_tally[digit]++)
                cout << number << " ";
        }

        number = number / 10;
        cout << endl;
    }

}

作为参考,输出应如下所示:

输入一个数字(要退出的任何负数):64246

重复数字:4 6

2 个答案:

答案 0 :(得分:1)

因为你已经掌握了在索引中存储出现次数的逻辑。你可以继续这种方法,一旦你完成整个数字,你可以使用另一个循环来打印出现多于1次的索引。

while (number > 0)
 {
        digit = number % 10;
        digit_tally[digit -1] += 1;
        number = number / 10;
        cout << endl;
 }

 for ( int i = 0; i < 10; ++i)
 {
    if (digit_tally[i] > 1)
    {
       std::cout << i + 1 << " ";
    }
 }

答案 1 :(得分:0)

 for (digit_tally[digit] = 1; digit_tally[digit] <= 10; digit_tally[digit]++)
                cout << number << " ";

这取数字_tally [数字]的值,将其设置为1,然后在1到10之间运行循环,并且只会反复吐出相同的数字。

如果你想循环遍历数组,你可以像第一个for循环那样设置它(从0开始并且你有&lt; DIGITS,而不是&lt; =。

是很重要的。

不要混淆,所有循环都可以通过一些小的调整来完成相同的任务。

 for (i = 0; i < DIGITS; i++)
    {
        digit_tally[i] = 0;
    }

在语义上与

相同
i = 0
while (i < DIGITS)
{
    digit_tally[i] = 0;
    ++i
}