如何使用内置库在C程序中执行A-B设置操作

时间:2017-11-12 14:28:14

标签: c arrays set-operations

我是C语言的新手。假设我有两个数组ab

int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
int b[10] = { 1,3,5,7,9 };

我希望执行a-b,以便我可以获取数组a中不存在的数组b的所有元素。在ruby或python中,我只需执行a-b即可获得结果。这是我的c代码,我已经尝试但我的代码无法正常工作。我正在寻找一个C库,我在一行中为我做这个操作。我也找到了这个library但不知道如何实现它。任何形式的帮助都表示赞赏。

#include<stdio.h>
#define Max 100

int m,n,i,j,k,p,q,r,s;
int flag=1;
char char1,char2,char3;
void Difference(int *,int *,int ,int);
void Display2(char ,char ,int );

int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
int b[10] = { 1,3,5,7,9 };
int c[10];

void Difference(int *a1,int *b1,int m1,int n1)
{
    q=0;
    p=0;
    i=0;
    for(k=0;k<m1;k++){
        flag=1;
        for(j=0;j<n1;j++){
            if(b1[j]==a1[k]){
                flag=1;
                q++;
                break;
            }
            else{
                flag=0;
            }
        }
        if(flag==0){
            c[p]=a1[k];
            p++;
        }
    }
}

void Display2(char ac,char bc,int m1)
{
    printf("\nThe Difference Of Two Sets i.e '%c - %c' Is : { ",ac,bc);
    r = m1 - q;
    for(p=0;p<r;p++){
        printf("%2d",c[p]);
    }
    printf(" }");
}


int main(){
    Difference(a,b,m,n);
    Display2('A','B',m);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我猜错了,您忘了用适当的值初始化mn变量。 在致电m = 10; n = 5;之前添加Difference,您的代码将有效。

我还建议你编写更易读的代码:更好地命名变量,使用一些空格并避免使用全局变量。

修改 在C ++中,您可以编写:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>

int main() {
    std::set<int> a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    std::set<int> b = { 1, 3, 5, 7, 9 };
    std::set<int> c;

    std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(c, c.begin()));

    for (const auto item : c) 
        std::cout << item << " ";

    return 0;
} 

可以找到有关std::set_difference的详细信息here