【问题标题】:Checking and replacing a duplicate in a single for loop在单个 for 循环中检查和替换重复项
【发布时间】:2021-05-07 09:44:22
【问题描述】:

所以我已经将我的代码设置为这个(注意我有我的用户输入数组并在另一个函数和初学者中显示结果)

int main( )
{
    using namespace std;

    int a[8];

    populateArray(a, 8);

    cout<<"The array is: ";
    displayArray(a, 8);
    cout<<"\nThis array becomes: "<<sameElement(a, 8);

int sameElement(int a[], int size)
{
    using namespace std;

    for(int i = 0; i < size; i ++)
        {
            if( a[i] == a[i +1])
            {
                a[i + 1] = 0;
                return i;
            }
            else
                {
                    return a[i];
                }
        }

}

一直在尝试查看用户是否输入了重复的数字(效果很好)。我想将该重复项替换为零的用户输入的相同数组。可悲的是,我得到一个 0、1 或 2,它替换了整个数组。不知道如何将它返回到我的 main 中,因为它还说尽管在我的函数中调用它并试图找到返回函数的正确方法,但我没有从我的函数返回任何内容。我已经在顶部声明了我的函数,它们也都与参数匹配。所以还是不明白为什么我总是遇到将我的函数返回到 main 的问题?

例子:

数组:1 2 2 3 4 5 5 7 数组变为 1 0 0 3 4 0 0 7

【问题讨论】:

  • 你看到sameElement 的回报了吗?它会总是在第一次迭代时返回。

标签: c++ arrays for-loop if-statement


【解决方案1】:

我想您想替换 sameElement 函数中数组的重复条目。您得到的是单个整数,因为 sameElement 函数返回单个整数。

不要在for循环中返回值,而是让函数运行。另请注意a[i+1] 将超出数组a 的限制,因此您必须将结束条件更改为size - 1。

void sameElement(int a[], int size)
{
    for(int i = 0; i < size - 1; i++)
    {
        if( a[i] == a[i +1])
        {
            a[i] = 0;
            if(i + 1 == size - 1)
            {
                a[i + 1] = 0;
            }
        }
    }
}

因为函数不再返回值,所以必须自己显示。

cout << "\nThis array becomes: ";
sameElement(a, 8);
displayArray(a, 8);

最后,我不知道这是否是故意的,但 sameElement 函数只会在它们彼此相邻的情况下查找重复条目:它不会将 1 2 1 2 1 2 1 2 变为零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2021-10-13
    • 2020-10-04
    • 2017-08-15
    • 2021-05-17
    相关资源
    最近更新 更多