通常我会使用其他方法来修复这个程序,但不允许我在这个项目中使用高级技术,所以我所拥有的或多或少是我所允许的。
所以我的程序是要接收一个包含 10 个数字的数组,然后输出数组中每个值的数量。例如,{1, 1, 1, 1, 1, 2, 2, 2, 2, 2} 意味着返回
5 1
5 2
但是,它返回
6 1
4 2
我已确保 finalData 和 Data 数组包含正确的值。
cout << count(data, data + MAX_VALUE, finalData[i+1]) << " " << data[i] << "\n";
似乎输出了错误的值。
出于某种原因。我相信错误出在我的最后一个函数 getResults 中,更具体地说是最后一个 for 循环。这是该函数。
void getResults(int finalData[], int data[])
{
int temp[MAX_VALUE];
int j = 0;
for (int i = 0; i < MAX_VALUE - 1; i++)
if (finalData[i] != finalData[i + 1])
temp[j++] = finalData[i];
temp[j++] = finalData[MAX_VALUE - 1];
for (int i = 0; i < j; i++)
{
finalData[i] = temp[i];
}
for (int i = 0; i < j; i++)
{
cout << count(data, data + MAX_VALUE, finalData[i+1]) << " " << data[i] << "\n";
}
}
这是我的完整代码。
#include<iostream>
#include<iomanip>
#include<string>
#include<cmath>
#include <algorithm>
using namespace std;
void printHeader();
int getData(string);
void getResults(int finalData[], int data[]);
const int MAX_VALUE = 10;
int main(void)
{
int countValue = 0;
int freq = 0;
printHeader();
int data[MAX_VALUE] = {};
int frequency[MAX_VALUE] = {};
for (int i = 0; i < MAX_VALUE; i++)
{
cout << "Please enter data position " << i + 1 << "\n";
data[i] = getData("\nPlease enter a valid integer.\n");
}
sort(data, data + MAX_VALUE);
int values[MAX_VALUE] = {};
int secondData[MAX_VALUE] = {};
for (int i = 0; i < MAX_VALUE; i++)
{
secondData[i] = data[i];
}
getResults(data, secondData);
return 0;
}
void printHeader()
{
}
int getData(string error)
{
int userInput = 0;
do
{
cin >> userInput;
if (cin.fail())
{
cout << error;
}
} while (cin.fail());
return userInput;
}
void getResults(int finalData[], int data[])
{
int temp[MAX_VALUE];
int j = 0;
for (int i = 0; i < MAX_VALUE - 1; i++)
if (finalData[i] != finalData[i + 1])
temp[j++] = finalData[i];
temp[j++] = finalData[MAX_VALUE - 1];
for (int i = 0; i < j; i++)
{
finalData[i] = temp[i];
}
for (int i = 0; i < j; i++)
{
cout << count(data, data + MAX_VALUE, finalData[i+1]) << " " << data[i] << "\n";
}
}
得到正确答案。进行了我在顶部列出的更改以及对计数函数的以下更改。
cout << count(data, data + MAX_VALUE, finalData[i]) << " " << finalData[i] << "\n";
最佳答案
你犯了一个简单的错误。当您调用 getResults 时,您将相同的数组(指针)传递给 2 个不同的参数。现在,当您更新 finalData 时,不需要的副作用也会更新 data(它们是相同的指针(具有不同的名称)。因此,当您调用 count 时,将不会返回预期的结果。
要解决此问题,您可以复制输入数组并将其作为 getResults(...) 函数的第二个参数。
关于c++ - 程序旨在计算数组中有多少重复项。但是,它返回错误的频率值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314327/