c - 将未排序的 C 数组复制到另一个数组中,同时避免重复
问题描述
大家好,感谢您的宝贵时间。
作为练习,我想编写一个程序,将所有元素从一个数组复制到另一个数组,但没有重复项。唯一的条件是我无法更改原始数组 - 所以没有排序。
我尝试制作一个函数来检查是否在我们复制到的数组(array2)中找到了array1 的当前元素。如果不是,我们然后将元素复制到第二个数组并将大小增加一。
但是,它不起作用:
如果我有
int array1[15] = {3,2,4,7,9,1,4,6,7,0,1,2,3,4,5};
int array2[15];
array2
应包含以下数字:3,2,4,7,9,1,6,0,5
但我的输出如下:3,2,4,7,9,1,6
这是代码:
#include <stdio.h>
#include <stdlib.h>
int already_exists(int array2[], int size_arr2, int element)
{
int i;
for(i=0; i<size_arr2; i++)
{
if(array2[i] == element)
return 1;
}
return 0;
}
int main()
{
int array1[15] = {3,2,4,7,9,1,4,6,7,0,1,2,3,4,5};
int array2[15];
int i;
int size_arr2=0;
for(i=0; i<9; i++)
{
int element = array1[i];
if(already_exists(array2, size_arr2, element) == 1)
continue;
else
{
array2[size_arr2] = element;
size_arr2++;
}
}
for(i=0; i<size_arr2; i++)
{
printf("%d, ", array2[i]);
}
return 0;
}
解决方案
你在 for 循环中有错字
for(i=0; i<9; i++)
该数组array1
包含 15 个元素。所以循环应该看起来像
for ( i = 0; i < 15; i++ )
错误的原因是您使用的是“幻数”而不是命名常量。
然而,整个程序效率低下,因为该函数already_exists
是为数组的每个元素调用的array1
。至少您可以将其声明为内联函数。
此外,它应该声明为
int already_exists( const int array2[], size_t size_arr2, int element );
而不是这个函数,最好编写一个执行完整操作的函数。
这是一个演示程序。
#include <stdio.h>
size_t copy_unique( const int a1[], size_t n1, int a2[] )
{
size_t n2 = 0;
for ( size_t i = 0; i < n1; i++ )
{
size_t j = 0;
while ( j < n2 && a2[j] != a1[i] ) j++;
if ( j == n2 ) a2[n2++] = a1[i];
}
return n2;
}
int main(void)
{
enum { N = 15 };
int array1[N] = { 3, 2, 4, 7, 9, 1, 4, 6, 7, 0, 1, 2, 3, 4, 5 };
int array2[N];
for ( size_t i = 0; i < N; i++ ) printf( "%d ", array1[i] );
putchar( '\n' );
size_t n2 = copy_unique( array1, N, array2 );
for ( size_t i = 0; i < n2; i++ ) printf( "%d ", array2[i] );
putchar( '\n' );
return 0;
}
它的输出是
3 2 4 7 9 1 4 6 7 0 1 2 3 4 5
3 2 4 7 9 1 6 0 5
推荐阅读
- node.js - Socket.io 未在 React Native 上连接
- reactjs - 从 api 导航到产品
- apache - 当标头很大时,apache 抛出 500
- python - 两个列表字典的并集
- java - 对于 InputStream 类型,方法 readAllBytes() 未定义
- objective-c - 使用 Objective-C 解析/反序列化 QueryString
- javascript - 如何将表格放置在侧边栏旁边的vue中
- javascript - 如何在 onClick 事件反应 js 上从子级渲染其他组件?
- python - 名称未定义 python
- micronaut - 忽略@MicronautTest 的“数据源”