如何使用内置库在 C 程序中执行 A-B 集合操作
How to perform A-B set operation in C program using builtin library
我是C语言新手。假设我有两个数组 a
和 b
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 代码,但我的代码不是 working.I 我正在寻找一个 C 库,它在 line.I 中为我执行此操作也找到了这个 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;
}
我猜,您忘记了用正确的值初始化 m
和 n
变量。
在调用 Difference
之前添加 m = 10; n = 5;
,您的代码将起作用。
我还建议您编写更具可读性的代码:更好地命名变量,使用一些空格并避免使用全局变量。
编辑:
在 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
我是C语言新手。假设我有两个数组 a
和 b
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 代码,但我的代码不是 working.I 我正在寻找一个 C 库,它在 line.I 中为我执行此操作也找到了这个 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;
}
我猜,您忘记了用正确的值初始化 m
和 n
变量。
在调用 Difference
之前添加 m = 10; n = 5;
,您的代码将起作用。
我还建议您编写更具可读性的代码:更好地命名变量,使用一些空格并避免使用全局变量。
编辑: 在 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