3个回答
展开全部
j
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个是数集还是字符集,还是都有呢?
追问
任意键盘字符
追答
#include
#include
#define MAX 50
tgj(char *A)
{
int i,j,k;
for(i=0;A[i]!=NULL;i++)
{
for(j=i+1;A[j]!=NULL;j++)
{
if(A[i]==A[j])
{
k=j;
do
{
A[k]=A[k+1];
k++;
}while(A[k]!=NULL);
j--;
}
}
}
}
char *ua(char *A,char *B,char *C)
{
strcpy(C,A);
strcat(C,B);
tgj(C);
return C;
}
char *uq(char *A,char *B,char *C)
{
int i,j,k=0;
for(i=0;A[i]!=NULL;i++)
{
for(j=0;B[j]!=NULL;j++)
{
if(A[i]==B[j])
{
C[k]=A[i];
k++;
}
}
}
C[k]=NULL;
tgj(C);
return C;
}
char *udg(char *A,char *B,char *C)
{
int i,j,k=0,p;
for(i=0;A[i]!=NULL;i++)
{
p=0;
for(j=0;B[j]!=NULL;j++)
{
if(A[i]==B[j])
{
p=1;
}
}
if(p==0)
{
C[k]=A[i];
k++;
}
}
C[k]=NULL;
tgj(C);
return C;
}
char *d(char *A,char *B,char *C)
{
int i,j,k=0;
strcpy(C,A);
strcat(C,B);
for(i=0;C[i]!=NULL;i++)
{
for(j=i+1;C[j]!=NULL;j++)
{
if(C[i]==C[j])
{
k=j;
do
{
C[k]=C[k+1];
k++;
}while(C[k]!=NULL);
k=i;
do
{
C[k]=C[k+1];
k++;
}while(C[k]!=NULL);
}
}
}
tgj(C);
return C;
}
main()
{
unsigned char A[MAX],B[MAX],C[MAX*2];
printf("输入A,以回车结束\n");
gets(A);
tgj(A);
printf("输入B,以回车结束\n");
gets(B);
tgj(B);
printf("A并B为%s\n",ua(A,B,C));
printf("A减B为%s\n",udg(A,B,C));
printf("A交B为%s\n",uq(A,B,C));
printf("对称差为%s\n",d(A,B,C));
getchar();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
集合是一种比较重要的数据结构,比较正规的是先定义这个数据结构:
#ifndef SET_H_
#define SET_H_
typedef struct Set {
char elements[128];
} Set;
// 初始为空
void MakeEmpty(Set *set);
// 计算元素数目
int GetSize(Set *set);
// 是否包含某元素
int Contain(Set *set,char element);
// 添加元素
void AddElement(Set *set,char element);
// 删减元素
void DeleteElement(Set *set,char element);
// 并运算
Set Join(Set *A,Set *B);
// 交运算
Set Meet(Set *A,Set *B);
// 减法运算
Set Sub(Set *A,Set *B);
// 对称差运算
Set SymmetricalSub(Set *A,Set *B);
#endif
保存这个文件为Set.h
然后再在一个C文件中对其中的函数给以实现
// file : Set.c
#include "Set.h"
#include<stdio.h>
// 初始化为空 => Done
void MakeEmpty(Set *set){
int i;
for(i=0;i<128;i++){
(*set).elements[i]=0;
}
}
// 获得大小 => Done
int GetSize(Set *set){
int Size=0;
int i;
for(i=0;i<128;i++){
if((*set).elements[i]==0)
break;
else {
Size++;
}
}
return Size;
}
// 是否包含指定元素 => Done
int Contain(Set *set,char element){
int Contain=0;
int i;
int Size=GetSize(set);
for(i=0;i<Size;i++){
if((*set).elements[i]==element){
Contain=1;
break;
}
}
return Contain;
}
// 新加一个元素 => Done
void AddElement(Set *set,char element){
int Size=GetSize(set);
int exist=0;
int count;
for(count=0;count<Size;count++){
if((*set).elements[count]==element){
exist=1;
break;
}
}
if(!exist){
(*set).elements[Size]=element;
}
}
// 删除一个元素 =>Done
void DeleteElement(Set *set,char element){
int Size=GetSize(set);
int MarkPosition=-1;
int i;
for(i=0;i<Size;i++){
if((*set).elements[i]==element){
MarkPosition=i;
break;
}
}
if(MarkPosition>=0){
for(i=MarkPosition;i<Size-1;i++){
(*set).elements[i]=(*set).elements[i+1];
}
(*set).elements[Size-1]=0;
}
}
// 并运算 => Done
// 不得不承认,该算法是最差的算法
Set Join(Set *A,Set *B){
// 以A集合为基准集合,如果A中不含有B中某元素,就把B集合中的元素加入到A
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i<Size;i++){
if(!Contain(A,(*B).elements[i])){
AddElement(&set,(*B).elements[i]);
}
}
// 在return的时候,set这段内存就已经被释放了
return set;
}
// 交运算 => Done
Set Meet(Set *A,Set *B){
Set set;
int SizeOfA=GetSize(A);
int i;
MakeEmpty(&set);
for(i=0;i<SizeOfA;i++){
if(Contain(B,(*A).elements[i])){
AddElement(&set,(*A).elements[i]);
}
}
return set;
}
// 差运算 A-B => Done
Set Sub(Set *A,Set *B){
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i<Size;i++){
if(Contain(A,(*B).elements[i])){
DeleteElement(&set,(*B).elements[i]);
}
}
return set;
}
// 对称差运算 => Done
Set SymmetricalSub(Set *A,Set *B){
Set set1=Join(A,B);
Set set2=Meet(A,B);
Set set=Sub(&set1,&set2);
return set;
}
这个保存为Set.c
之后就可以编写你自己的程序了,我简单的写了一个:
#include<stdio.h>
#include "Set.h"
int main(){
Set A;
Set B;
Set C;
MakeEmpty(&A);
MakeEmpty(&B);
AddElement(&A,'A');
AddElement(&A,'C');
AddElement(&A,'D');
AddElement(&B,'B');
AddElement(&B,'C');
C=SymmetricalSub(&A,&B);
printf("Now , the size of C : %d \n", GetSize(&C));
}
希望能帮到您。
#ifndef SET_H_
#define SET_H_
typedef struct Set {
char elements[128];
} Set;
// 初始为空
void MakeEmpty(Set *set);
// 计算元素数目
int GetSize(Set *set);
// 是否包含某元素
int Contain(Set *set,char element);
// 添加元素
void AddElement(Set *set,char element);
// 删减元素
void DeleteElement(Set *set,char element);
// 并运算
Set Join(Set *A,Set *B);
// 交运算
Set Meet(Set *A,Set *B);
// 减法运算
Set Sub(Set *A,Set *B);
// 对称差运算
Set SymmetricalSub(Set *A,Set *B);
#endif
保存这个文件为Set.h
然后再在一个C文件中对其中的函数给以实现
// file : Set.c
#include "Set.h"
#include<stdio.h>
// 初始化为空 => Done
void MakeEmpty(Set *set){
int i;
for(i=0;i<128;i++){
(*set).elements[i]=0;
}
}
// 获得大小 => Done
int GetSize(Set *set){
int Size=0;
int i;
for(i=0;i<128;i++){
if((*set).elements[i]==0)
break;
else {
Size++;
}
}
return Size;
}
// 是否包含指定元素 => Done
int Contain(Set *set,char element){
int Contain=0;
int i;
int Size=GetSize(set);
for(i=0;i<Size;i++){
if((*set).elements[i]==element){
Contain=1;
break;
}
}
return Contain;
}
// 新加一个元素 => Done
void AddElement(Set *set,char element){
int Size=GetSize(set);
int exist=0;
int count;
for(count=0;count<Size;count++){
if((*set).elements[count]==element){
exist=1;
break;
}
}
if(!exist){
(*set).elements[Size]=element;
}
}
// 删除一个元素 =>Done
void DeleteElement(Set *set,char element){
int Size=GetSize(set);
int MarkPosition=-1;
int i;
for(i=0;i<Size;i++){
if((*set).elements[i]==element){
MarkPosition=i;
break;
}
}
if(MarkPosition>=0){
for(i=MarkPosition;i<Size-1;i++){
(*set).elements[i]=(*set).elements[i+1];
}
(*set).elements[Size-1]=0;
}
}
// 并运算 => Done
// 不得不承认,该算法是最差的算法
Set Join(Set *A,Set *B){
// 以A集合为基准集合,如果A中不含有B中某元素,就把B集合中的元素加入到A
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i<Size;i++){
if(!Contain(A,(*B).elements[i])){
AddElement(&set,(*B).elements[i]);
}
}
// 在return的时候,set这段内存就已经被释放了
return set;
}
// 交运算 => Done
Set Meet(Set *A,Set *B){
Set set;
int SizeOfA=GetSize(A);
int i;
MakeEmpty(&set);
for(i=0;i<SizeOfA;i++){
if(Contain(B,(*A).elements[i])){
AddElement(&set,(*A).elements[i]);
}
}
return set;
}
// 差运算 A-B => Done
Set Sub(Set *A,Set *B){
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i<Size;i++){
if(Contain(A,(*B).elements[i])){
DeleteElement(&set,(*B).elements[i]);
}
}
return set;
}
// 对称差运算 => Done
Set SymmetricalSub(Set *A,Set *B){
Set set1=Join(A,B);
Set set2=Meet(A,B);
Set set=Sub(&set1,&set2);
return set;
}
这个保存为Set.c
之后就可以编写你自己的程序了,我简单的写了一个:
#include<stdio.h>
#include "Set.h"
int main(){
Set A;
Set B;
Set C;
MakeEmpty(&A);
MakeEmpty(&B);
AddElement(&A,'A');
AddElement(&A,'C');
AddElement(&A,'D');
AddElement(&B,'B');
AddElement(&B,'C');
C=SymmetricalSub(&A,&B);
printf("Now , the size of C : %d \n", GetSize(&C));
}
希望能帮到您。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询