求教如何用C语言求两个字母集合的交集?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教如何用C语言求两个字母集合的交集?相关的知识,希望对你有一定的参考价值。

首先,如果是数学上的集合概念,那就说明,集合A自身的每个元素都不相同。

那么,程序就可以简化成,

    设数组key[52],用于记录字母出现次数。

    扫描一次集合A,把出现的字母计到key的对应位置里。

    同理扫描一次集合B。

    查看key数组,>=2的对应字母输出到集合C,C就是所求交集。

参考技术A #include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main(void)
    char a[30],b[20],c[20],i,j,k,t;
    srand((unsigned)time(NULL));
    for(i=0;i<30;i++)
        if(a[i]=rand()%26+'a',i<20)
            b[i]=rand()%26+'a';
    for(k=i=0;i<30;i++)
        for(j=0;j<20;j++)
            if(a[i]==b[j])
                for(t=0;t<k;t++)
                    if(c[t]==b[j])
                        break;
                if(t>=k)
                    c[k++]=b[j];
            
    printf("The intersection of A and B are as follows:\\n"); 
    for(i=0;i<k;printf("%c ",c[i++]));
    printf("\\n");
    return 0;

追问

你现在去写了么?

C++求两个集合的交集

#include<iostream.h>
void main()

int a[5],b[5],c[5];
int i,j,k;
int *p1,*p2,*p3;
cout<<"请输入数组a:";
for(i=0;i<5;i++)
cin>>a[i];
cout<<"请输入数组b:";
for(j=0;j<5;j++)
cin>>b[j];
p1=&a[i];p2=&b[j];p3=&c[0];
for(i=0;i<5;i++)

for(j=0;j<5;j++)

if(*p1==*p2++)
*p3++=*p1;


cout<<"a数组为:";
for(i=0;i<5;i++)
cout<<a[i]<<' ';
cout<<endl;
cout<<"b数组为:";
for(j=0;j<5;j++)
cout<<b[j]<<' ';
cout<<endl;
cout<<"c数组为:";
for(k=0;k<5;k++)
cout<<c[k]<<' ';
cout<<endl;

就是要将a,b都赋值给c,用指针。。。

改过来啦!你的p1,p2初始化有错误。而且在求交集的时候p1应该初始化在第一层循环内这样内循环每经过一轮的判断,p1又能回到数组a的首地址。注意输入a、b数组的值时不要有重复的值,否则出错,事实上集合中也不允许有重复的元素。哪里不清楚Hi我。
#include<iostream.h>
void main()

int a[5],b[5],c[5]=0;//n是用来统计相同的元素总共多少个
int i,j,k,n=0;
int *p1,*p2,*p3;
cout<<"请输入数组a:";
for(i=0;i<5;i++)
cin>>a[i];
cout<<"请输入数组b:";
for(j=0;j<5;j++)
cin>>b[j];
p1=&a[0];p3=&c[0];
for(i=0;i<5;i++)

p2=&b[0];
for(j=0;j<5;j++)

if(*p1==*p2++)

*p3++=*p1;
n++;


p1++;

cout<<"a数组为:";
for(i=0;i<5;i++)
cout<<a[i]<<' ';
cout<<endl;
cout<<"b数组为:";
for(j=0;j<5;j++)
cout<<b[j]<<' ';
cout<<endl;
cout<<"c数组为:";
for(k=0;k<n;k++)
cout<<c[k]<<' ';
cout<<endl;
参考技术A #include<stdio.h>
void main()

int a[5],b[5],c[5]=0;
int i,j,k,n=0;
int *p1,*p2,*p3;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(j=0;j<5;j++)
scanf("%d",&b[j]);
p1=&a[0];p3=&c[0];
for(i=0;i<5;i++)

p2=&b[0];
for(j=0;j<5;j++)

if(*p1==*p2++)

*p3++=*p1;
n++;


p1++;

for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(j=0;j<5;j++)
printf("%d ",b[j]);
printf("\n");
for(k=0;k<n;k++)
printf("%d ",c[k]);
printf("\n");
参考技术B #include<stdio.h>
void main()

int a[5],b[5],c[5]=0;
int i,j,k,n=0;
int *p1,*p2,*p3;
printf("请输入数组a:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("请输入数组b:");
for(j=0;j<5;j++)
scanf("%d",&b[j]);
p1=&a[0];p3=&c[0];
for(i=0;i<5;i++)

p2=&b[0];
for(j=0;j<5;j++)

if(*p1==*p2++)

*p3++=*p1;
n++;


p1++;

for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(j=0;j<5;j++)
printf("%d ",b[j]);
printf("\n");
for(k=0;k<n;k++)
printf("%d ",c[k]);
printf("\n");

以上是关于求教如何用C语言求两个字母集合的交集?的主要内容,如果未能解决你的问题,请参考以下文章

如何求两个数组的交集??

c语言中求交集的一个函数,不知道哪里错了,求高手解答。。。

利用go语言实现求数组交集的算法

本人碰见一道C语言难题,寻大神帮助,利用C语言实现:求任意两个集合的交集、并集、差集,

arcgis怎么求差集

C++求两个集合的交集