我的老师给了我们一个代码,用户输入一个最多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
答案 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
}