【问题标题】:C++ merged array output errorC++合并数组输出错误
【发布时间】:2014-01-28 17:57:26
【问题描述】:

我想将两个排序的数组合并到第三个数组并显示升序。我在输出显示无效值的合并数组时出现错误(屏幕上重复显示“零”位)

#include<iostream.h>
#include<conio.h>


void Merge(int name[], int name2[], int name3[], int temp, int temp2, int &temp3);

void main()
{
    int i,j,size,name[100],name2[100],name3[200],temp,temp2,temp3;
    cout<<"\nHow many numbers Ascending order:";
    cin>>size;

    cout<<"\nEnter Elements: \n";
    for(i=0;i<size;i++)
    {
        cin>>name[i];
    }
    for(i=0;i<size;i++)
    {
     for(j=0;j<size-i-1;j++)
     {
      if(name[j]>name[j+1])                                        //just replace > by < for descending order.
      {
      temp=name[j];
      name[j]=name[j+1];
      name[j+1]=temp;
      }

     }
    }
    cout<<"\nAscending order is:";
    for(i=0;i<size;i++)
    {
    cout<<" "<<name[i];
    }



    cout<<"\n\nHow many numbers for Descending Order:";
    cin>>size;
    cout<<"\nEnter Descending Elements: \n";


    for(i=0;i<size;i++)
    {
    cin>>name2[i];
    }
    for(i=0;i<size;i++)
    {
     for(j=0;j<size-i-1;j++)
     {
      if(name2[j]<name2[j+1])                                        //just replace > by < for descending order.
      {
      temp2=name2[j];
      name2[j]=name2[j+1];
      name2[j+1]=temp2;
      }

     }
    }
    cout<<"\nDescending order is:";
    for(i=0;i<size;i++)
    {
    cout<<" "<<name2[i];
    }

    Merge(name,name2,name3,temp,temp2,temp3);

        cout<<"\n\nThe Merged Array in Ascending Order"<<endl;
        for(i=0;i<temp3;i++)
        {
            cout<<name3[i]<<" ";
        }


    getch();

}


    void Merge(int name[], int name2[], int name3[], int temp, int temp2, int &temp3)
    {
          int i=0, j=temp2-1;
          temp3=0;
          while (i<temp && j>=0)
          {
            if (name[i]<name2[j])
              name3[temp3++]=name[i++];
            else if (name[i]>name2[j])
              name3[temp3++]=name2[j--];
            else
            {
              name3[temp3++]=name[i++];
              j--;
            }
          }
          for (int t=i;t<temp;t++)
            name3[temp3++]=name[t];
          for (t=j;t>=0;t--)
            name3[temp3++]=name2[t];

    }

【问题讨论】:

  • 您是否已经尝试调试您的代码?
  • 你需要一些东西,从 name1 或 name2 中取下一个,这取决于哪个更大,并复制任何剩余部分。根本不是你在做什么。

标签: c++ arrays merge


【解决方案1】:

您的 Merge 函数正在获取 name3 的副本,添加您的值,然后在完成后丢弃副本。所以你的数组被合并了,但是你永远不会从函数中得到合并的数组。

您可能想让Merge 改为使用指向name3 的指针。

void Merge(int name[], int name2[], int *name3, int temp, int temp2, int &temp3);

这将允许您的函数在数组本身上工作,而不是在副本上工作。请参阅第二个示例here 以供参考。

注意:您可能还必须传入name3 的大小,以避免出现越界错误。

【讨论】:

  • 感谢您的反馈,我尝试了上述方法,但在创建构建时出错。我是计算机科学专业的学生,​​也是 C++ 的新手。如果您能帮助我,我将不胜感激。
猜你喜欢
  • 2021-07-12
  • 2021-02-19
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多