如何正确比较存储在内存中的两个数组?

时间:2019-04-15 21:33:18

标签: c++ visual-c++

我正在尝试构建一个应该与数组进行比较的函数,其中一个函数是自己生成的(彩票数字),第二个数组是由用户输入提交并存储的。

这应该用于计算彩票和用户输入提交的数字之间的匹配数字。如果它们匹配,则应显示一条消息,告诉用户他已经赢得了大奖等。

这应该是比较两个数组的函数;我假设是正确的(更清楚地说:该程序是比较两个数组中的相应元素,并保留匹配的数字的计数)?

int compare(int user[], int lottery[]){
    int matches = 0;
    for (int i = 0; i < SIZE; i++) {
        if (user[i] == lottery[i]) {
            matches++;
        }
    }
    return matches;
}

问题出在返回主功能时,该功能应该告诉用户是否赢了。这是我在主函数中创建的一小段代码:

    int matches = compare(user, lottery);

    if (matches) {

        cout << "Congratulations, you have won the big prize" << endl;
    }
    else {
        cout << "Please, try again" << endl;
    }

如果用户中奖,应该显示一条消息并计算与彩票号码匹配的用户位数。

实际输出是用户输入的数字。希望我能解释一下自己。

如果您需要帮助并且需要更多信息,这里是完整的代码。 http://cpp.sh/8ivyc

3 个答案:

答案 0 :(得分:2)

在您的情况下,只有一次相同索引处的相同值可以匹配,但所有值必须相等

对代码进行最少更改的第一种可能性:

int compare(int user[], int lottery[]){
    int matches = 0;
    for (int i = 0; i < SIZE; i++) {
        if (user[i] == lottery[i]) {
            matches++;
        }
    }
    return (matches == SIZE); /* <<< modified */
}

但是在发现另一个值之后继续比较是没有用的,所以可以这样:

int compare(int user[], int lottery[]){
    for (int i = 0; i < SIZE; i++) {
        if (user[i] != lottery[i]) {
            return 0;
        }
    }
    return 1;
}

并且因为您使用的是C ++:

bool compare(int user[], int lottery[]){
    for (int i = 0; i < SIZE; i++) {
        if (user[i] != lottery[i]) {
            return false;
        }
    }
    return true;
}

(当然,也可以更改为使用 bool 而不是 int 的调用)

答案 1 :(得分:0)

最简单的方法是只使用std::array。如果您使用std::array,则可以使用==进行比较!

函数populateshow_values可以这样写:

void populate(std::array<int, SIZE>& nums) {
    srand(time(0));
    for (int& value : nums) {
        value = rand() % 9;
    }
}

void showValues(std::array<int, SIZE>& nums) {
    for (int i = 0; i < SIZE; i++) {
        cout << setw(3) << nums[i];
    }
    cout << endl;
}

compare特别简单:

bool compare(std::array<int, Size>& nums1, std::array<int, Size>& nums2) {
    return nums1 == nums2;
} 

答案 2 :(得分:0)

检查不平等而不是平等。 一旦用户元素不等于彩票元素

,您将立即退出功能
int compare(int user[], int lottery[]){
    for (size_t i = 0; i < SIZE; i++) {
        if (user[i] != lottery[i]) {
            return 0;
        }
    }
    return 1;
}