【发布时间】:2016-01-23 13:33:21
【问题描述】:
Python中有一个函数是这样运行的:
itertools.product("abc", repeat = 2)
返回以下内容:
("a", "a")
("a", "b")
("a", "c")
("b", "a")
("b", "b")
("b", "c")
("c", "a")
("c", "b")
("c", "c")
更改重复变量将更改元组中返回的项目数。 如何用 C 编写返回一个字符数组数组? (字符串数组)
更新:我现在有了我写的这个函数:
void cartesian(char *a, int al, char *b, int bl){
int i, j;
char c[al * bl][2];
for(i = 0; i < al; i++){
for(j = 0; j < bl; j++){
c[(i * bl) + j][0] = *(a + i);
c[(i * bl) + j][1] = *(b + j);
printf("%c%c\n", *(a + i), *(b + j));
}
}
}
int main(){
char a[] = "abc";
char b[] = "ab";
cartesian(a, strlen(a), b, strlen(b));
return 0;
}
如何更改此函数,以便它可以接收一组 char 数组并生成笛卡尔积?数组可以包含任意数量的字符,并且可以有任意数量的数组
函数应该如下所示:
void cartesian(char *a, int l){
/*Do cartesian*/
}
示例数组:
[
['a', 'b', 'c', '\0'],
['a', 'b', 'c', '\0'],
['a', 'b', 'c', '\0']
]
(包含空值以计算数组的长度) 应该产生
[
['a', 'a', 'a'],
['a', 'a', 'b'],
['a', 'a', 'c'],
['a', 'b', 'a'],
['a', 'b', 'b'],
['a', 'b', 'c'],
['a', 'c', 'a'],
['a', 'c', 'b'],
['a', 'c', 'c'],
['b', 'a', 'a'],
['b', 'a', 'b'],
['b', 'a', 'c'],
['b', 'b', 'a'],
['b', 'b', 'b'],
['b', 'b', 'c'],
['b', 'c', 'a'],
['b', 'c', 'b'],
['b', 'c', 'c'],
['c', 'a', 'a'],
['c', 'a', 'b'],
['c', 'a', 'c'],
['c', 'b', 'a'],
['c', 'b', 'b'],
['c', 'b', 'c'],
['c', 'c', 'a'],
['c', 'c', 'b'],
['c', 'c', 'c'],
]
【问题讨论】:
-
Python 版本是用 C:hg.python.org/cpython/file/2.7/Modules/itertoolsmodule.c#l1804 编写的,在
product_next函数中完成了繁重的工作。
标签: python c cartesian-product