C语言实现求集合的笛卡尔乘积,c++求若干个集合的笛卡尔积

文章目录

大家都知道求任意两个集合的笛卡尔积一般是如下这种方式

#include

#define m 3

#define n 2

int main(){

int i,j;

char a[m],b[n];

for (i=0;i

getchar();//吃掉\n

for (j=0;j

printf("集合a:\n");

for (i=0;i

printf("\n集合b:\n");

for (j=0;j

printf("\n{");

for (i=0;i

for (j=0;j

printf(" ",a[i],b[j]);

printf("}\n");

return 0;

}

例如输入两个集合“ABC”和“12”,结果如下

C语言实现求集合的笛卡尔乘积,c++求若干个集合的笛卡尔积_第1张图片

但是对于一个复杂字符串来说,例如"[A|B|C] D [E|F|G] [M|N]"(“[A|B|C]”代表一个集合,其他类是,集合中的元素用“|”隔开)这种形式的该怎么处理呢?

第一步,熟悉python的同学第一反应当然是利用split方法来处理喽,但是c++中没有split方法,但是提供了strtok函数来处理,方法如下

//分割字符串,spl代表分割规则

int StrSplit(char dst[][80], char* str, const char* spl)

{

int n = 0;

char *result = NULL;

result = strtok(str, spl);

while (result != NULL)

{

strcpy(dst[n++], result);

result = strtok(NULL, spl);

}

return n; //返回分割集合的个数

}

具体调用如下

StrSplit(dst, StrToChArr(m), " ");//以空格分割

接下来,最关键的方法就是求笛卡尔积了,我们使用STL中的vector来处理,方法如下

//求若干集合的笛卡尔积

string decare(const vector> &sets, string add)

{

vector> rs;

int n = sets.size();

vector tmp;

stri

你可能感兴趣的:(C语言实现求集合的笛卡尔乘积)