1,将两个数组按升序合并,并过滤掉重复数组元素
void Array(int* InputArray1, int InputNum1, int* InputArray2, int InputNum2, int** OutPutArray, int* OutputNum)
{
int *R = new int[InputNum1 + InputNum2 + 1];
int num = InputNum1 + InputNum2;
int temp;
int *R1 = new int[InputNum1 + InputNum2 + 1];
int flag = 0;
int count = 0;
//合并到一个数组里面
for (int i = 0; i < InputNum1 + InputNum2; i++)
{
if (i < InputNum1)
{
R[i] = InputArray1[i];
}
else
R[i] = InputArray2[i - (InputNum1)];
}
//数组进行排序
for (int i = 0; i < InputNum1 + InputNum2; i++)
{
for (int j = 0; j < InputNum1 + InputNum2 - i - 1; j++)
{
if (R[j] > R[j + 1])
{
temp = R[j];
R[j] = R[j + 1];
R[j + 1] = R[j];
}
}
}
for (int i = 0; i < num; i++)
cout << R[i];
cout << endl;
//重复数组元素进行删除
for (int i = 0; i < InputNum1 + InputNum2 - 1; i++)
{
if (R[i + 1] == R[i])
{
R1[flag] = i + 1;
flag++;
}
}
*OutPutArray = new int[InputNum1 + InputNum2 + 1];
for (int i = 0,j = 0; i < InputNum1 + InputNum2 ; i++)
{
if (R1[count] != i)
{
(*OutPutArray)[j] = R[i];
j++;
}
else
count++;
}
*OutputNum = InputNum1 + InputNum2 - flag;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a1[] = {1,2,2,5,1};
int a2[] = {1,2,3,4,5};
int* a3 = NULL;
int num = 0;
Array(a1, 5, a2, 5, &a3, &num);
for (int i = 0; i < num; i++)
{
cout << a3[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
1. 申请动态内存
数组: int *Array = new int [ Size ] ;
char* String = new char[ Size ] ;
2. 对作为二维数组的形参的操作
例如:
void Array(int* InputArray1, int InputNum1, int* InputArray2, int InputNum2, int** OutPutArray, int* OutputNum)
我当时在纸上写的对二级指针的操作是:*OutPutArray[j] = R[i]; //这里少了一个括号 (*OutPutArray)[j] = R[i];导致我在编译器中一直出现内存读写错误,
编译器把它理解成 *(OutPutArray[j]) = R[i];
以上是我事后反思自己当时纸写代码时出现的问题,几个小细节没有注意到,希望能有帮助