Я пытаюсь создать программу на C для создания массива всех перестановок набора строк. Я нашел некоторый код здесь, чтобы сделать это , но это с символами в строке, а не массивом строк. Вот моя отредактированная версия кода:
#include <stdio.h>
int main() {
char a[7][7] = {
"string1",
"string2",
"string3",
"string4",
"string5",
"string6",
"string7"
};
int i, j;
int f=5040; //factorial
char c[10]; //buffer
while (f--) {
printf("%s\n", a);
i=1;
while(a[i] > a[i-1]) i++;
j=0;
while(a[j] < a[i])j++;
strcpy(c,a[j]);
strcpy(a[j],a[i]);
strcpy(a[i],c);
i--;
for (j = 0; j < i; i--, j++) {
strcpy(c,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],c);
}
}
}
Я должен был перейти от таких вещей, как [j] = a [i] к strcpy (a [j], a [i]), так как я Копирую строку, а не один символ. В любом случае, когда я запускаю эту программу неотредактированной (см. Ссылку), она работает нормально, но когда я запускаю приведенный выше код, все, что он делает, это печатает «string1» один раз и затем завершает работу. Я не могу понять, почему - что мне не хватает?