比较 C 中的两个 int 数组

Comparing two int arrays in C

本文关键字:两个 int 数组 比较      更新时间:2023-10-16

有没有更好的方法来比较C++中的两个 int 数组。

struct integer
{
    int *number;
    int size;
};

这是我的结构,我使用了这个比较函数。我找到了这个解决方案,但它看起来像胡说八道。

int BigInteger::biggest(integer number1, integer number2)
{
    int biggest = 0;
    if (number1.size > number2.size)
    {
        biggest = 1;
    }
    else if (number1.size < number2.size)
    {
        biggest = -1;
    }
    else
    {
        for (int i = number1.size; i >=0 ; --i)
        {
            if (number1.number[i] > number2.number[i])
            {
                biggest = 1;
                return biggest;
            }
            else if (number1.number[i] < number2.number[i])
            {
                biggest = -1;
                return biggest;
            }
            else
            {
                continue;
            }
        }
    }
    return biggest;
}

如果函数将值转换为 1,则数字 1 大于数字 2
如果函数将值转换为 0,则数字 1 等于数字 2
如果函数将值转换为 -1,则 number2 大于 number1

这不会改善任何东西,除了它更清楚

int BigInteger::biggest(integer number1, integer number2)
{
    if (number1.size != number2.size)
        return number1.size - number2.size;
    for (int i = 0 ; i < number1.size; ++i) {
        if (number1.number[i] == number2.number[i])
            continue;
        return number1.number[i] - number2.number[i];
    }
    return 0;
}

此函数

    返回
  • > 0,然后返回 number1 > number2
  • 返回
  • <0>,然后返回 number1 < number2
  • 如果相等,则为 0

此外,在 c++ 中,您可以重载运算符,因此使用此代码实现>和<应该很容易。>

有一些小错误。 您不需要其中一些代码。当它不属于类时,它的运行速度会稍快一些。只需稍作修改,它就可以与qsort()一起使用(参数必须是指针((编辑:void指针(

struct integer
{
    int *number;
    int size;
}; 
int biggest(const integer &number1, const integer &number2)
{
    int biggest = 0;
    if (number1.size > number2.size)
    {
        biggest = 1;
    }
    else if (number1.size < number2.size)
    {
        biggest = -1;
    }
    else
    {
        for (int i = number1.size - 1; i >= 0; i--) // or --i, no difference
        {
            if (number1.number[i] > number2.number[i])
            {
                biggest = 1;
                return biggest;
            }
            if (number1.number[i] < number2.number[i])
            {
                biggest = -1;
                return biggest;
            }
            // don't need a continue statement here
        }
    }
    return biggest;
}
<</div> div class="answers">

您可以像这样使用 std::mismatch() 函数:

int BigInteger::biggest(integer a, integer b)
{
    if (a.size != b.size)
        return a.size - a.size;
    const auto res = std::mismatch(a.number, a.number + a.size, b.number);
    if (res.first == (a.number + a.size))
        return 0;
    else
        return (*res.first) < (*res.second) ? -1 : 1;
}

函数biggest()的名称具有很大的误导性。 compare()会好得多。此外,如果函数的返回类型是布尔值(true:a < b(,那么您可以使用std::lexicographical_compare(),代码会简单得多。