c++ - 程序旨在计算数组中有多少重复项。但是,它返回错误的频率值

标签 c++

通常我会使用其他方法来修复这个程序,但不允许我在这个项目中使用高级技术,所以我所拥有的或多或少是我所允许的。

所以我的程序是要接收一个包含 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/

相关文章:

c++ - C 简单指针示例

c++ - pthread 和 semaphore 在 osx maverick 10.9 中不适用于我

c++ - 关于隐式构造函数的创建?

c++ - 多 vector 访问与本地对象

c++ - 究竟什么时候捕获到异常?

c++ - 如何在qlistWidget中模拟双击item

c++ - 使用命名管道 WinAPI 的异步 I/O

c++ - 如何禁止在 Visual Studio C++ 项目中创建 .sbr 和 .bsc?

c++ - 如何将 MPI 派生数据类型用于 3D 数组?

c++ - 如何在 OpenCV 中设置指向 Mat 变量内容的指针