Il y a une fonction en Python qui fonctionne de cette façon:de itertools.product Python en C
itertools.product("abc", repeat = 2)
renvoie les éléments suivants:
("a", "a")
("a", "b")
("a", "c")
("b", "a")
("b", "b")
("b", "c")
("c", "a")
("c", "b")
("c", "c")
Changer la variable de répétition changera le nombre d'éléments reviennent dans un tuple. Comment cela peut-il être écrit en C pour renvoyer un tableau de tableaux de caractères? (Un tableau de chaînes)
MISE À JOUR: J'ai maintenant cette fonction que j'ai écrit:
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;
}
Comment puis-je changer cette fonction de sorte qu'il peut prendre dans un tableau de de tableaux de l'omble chevalier et rendre le produit cartésien ? Les tableaux peuvent contenir un certain nombre de caractères et il pourrait y avoir un certain nombre de tableaux
La fonction devrait ressembler à:
void cartesian(char *a, int l){
/*Do cartesian*/
}
Exemple tableau:
[
['a', 'b', 'c', '\0'],
['a', 'b', 'c', '\0'],
['a', 'b', 'c', '\0']
]
(nulls inclus pour travailler la longueur des tableaux) devrait produire
[
['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'],
]
Le * Python * est écrit en C: https://hg.python.org/cpython/file/2.7/Modules/itertoolsmodule.c#l1804 , avec le gros travail effectué dans la fonction 'product_next'. –