定义两个数组存放这两个集合,再定义一个数组存放它们的集合,用类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。
创新互联专注于中大型企业的成都网站设计、成都做网站和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户千余家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
只判断有没有交集的话很简单了,直接挨个比较就可以了,如果有相同的返回1,没相同的返回0。
如果要求2个数组相交的元素的话自己写一个代码也可以,或者可以直接使用STL算法中的set_intersection函数。
通过你描述的问题,正确的交集代码如下:
void bing(char a[],char b[],int m,int n)
{ char d[400];
int i=0,j=0,s=m;
for(i=0;im;i++)
d[i]=a[i];
for(i=0;in;i++){
for(j=0;jm;j++)
{
if(b[i]==a[j]) break;
}
if(j==m) d[s++]=b[i];
}
cout"集合并集是:";
for(i=0;is;i++)
coutd[i]" ";
}
到底是交集还是并集啊?
求a,b的交集c
调用bing 函数求数组s1,s2的并集s3
首先,如果是数学上的集合概念,那就说明,集合A自身的每个元素都不相同。
那么,程序就可以简化成,
设数组key[52],用于记录字母出现次数。
扫描一次集合A,把出现的字母计到key的对应位置里。
同理扫描一次集合B。
查看key数组,=2的对应字母输出到集合C,C就是所求交集。
#include stdio.h
#include string.h
#include conio.h
#define ARR_LEN 255 /*数组长度上限*/
#define elemType char /* 集合元素数据类型 */
/* 集合数据结构 */
typedef struct set {
elemType data[ARR_LEN];
int length;
} set;
/* 初始化集合 */
void initSet (set *S) {
S-length = 0;
}
/* 交集 */
/* A与B的交集(A∩B):既属于A又属于B的元素构成的集合 */
int setIntersection (set A, set B, set *dest) {
int i = 0, j = 0, k = 0;
dest-length = 0;
for (i=0; iA.length; i++) { /* 外循环遍历A */
for (j=0; jB.length; j++) { /* 内循环遍历B */
if (A.data[i] == B.data[j]) { /* 既属于A又属于B的元素,存入dest */
dest-data[k] = A.data[i];
k++;
}
}
}
dest-length = k;
if (dest-length)
return 1;
else
return 0;
}
/* 并集 */
/* A与B的并集(A∪B):A与B所有元素构成的集合 */
int setUnion (set A, set B, set *dest) {
int i = 0, j = 0, k = 0;
dest-length = 0;
for (i=0; iA.length; i++) { /* 外循环遍历A */
for (j=0; jB.length; j++) { /* 内循环遍历B */
if (A.data[i] == B.data[j]) /* 既属于A又属于B的元素,跳过 */
break;
}
if (j == B.length) { /* 属于A但不属于B的元素,存入dest */
dest-data[k] = A.data[i];
k++;
}
}
for (j=0; jB.length; j++) { /* B的所有元素,存入dest */
dest-data[k] = B.data[j];
k++;
}
dest-length = k;
if (dest-length)
return 1;
else
return 0;
}
/* 补集 */
/* B在A中的相对补集(A\B):属于A但不属于B的元素构成的集合 */
int setComplement (set A, set B, set *dest) {
int i = 0, j = 0, k = 0;
dest-length = 0;
for (i=0; iA.length; i++) { /* 外循环遍历A */
for (j=0; jB.length; j++) { /* 内循环遍历B */
if (A.data[i] == B.data[j]) /* 既属于A又属于B的元素,跳过 */
break;
}
if (j == B.length) { /* 属于A但不属于B的元素,存入dest */
dest-data[k] = A.data[i];
k++;
}
}
dest-length = k;
if (dest-length)
return 1;
else
return 0;
}
/* 打印集合内容 */
int printSet (set S) {
int i;
if (S.length == 0) {
puts ("The set is empty! ");
return 0;
}
for (i=0; iS.length; i++)
printf ("%c", S.data[i]);
putchar ('\n');
return 1;
}
int main (void) {
set A, B;
set AIB, AUB, ACB; /* 交集、并集、补集 */
initSet (A); initSet (B);
initSet (AIB); initSet (AUB); initSet (ACB);
strcpy (A.data, "123");
A.length = strlen (A.data);
strcpy (B.data, "4532");
B.length = strlen (B.data);
printf ("A:\t");
printSet (A);
printf ("B:\t");
printSet (B);
putchar ('\n');
printf ("A∩B:\t");
setIntersection (A, B, AIB);
printSet (AIB);
printf ("A∪B:\t");
setUnion (A, B, AUB);
printSet (AUB);
printf ("A\B:\t");
setComplement (A, B, ACB);
printSet (ACB);
getch (); /*屏幕暂留*/
return 0;
}