Перестановка строк

Задать три строки с клавиатуры и с помощью стандартных функций осуществить склейку этих строк всеми возможными способами (сделать максимальное кол-во перестановок) и записать новые строки. Вывести на экран изначальную и получившиеся строки.

Возможно ли как-то загнать этот код в цикл? Есть ли какие-нибудь иные способы, при которых будет использоваться цикл?

char a[25], b[25], c[25];

    gets(a);
    gets(b);
    gets(c);

    printf("%s %s %s\n", a, b, c);
    printf("%s %s %s\n", a, c, b);
    printf("%s %s %s\n", b, a, c);
    printf("%s %s %s\n", b, c, a);
    printf("%s %s %s\n", c, a, b);
    printf("%s %s %s\n", c, b, a);

Ответы (1 шт):

Автор решения: Zhihar

Возможно ли как-то загнать этот код в цикл?

char a[25], b[25], c[25];

gets(a);
gets(b);
gets(c);

char* strings[3];

// в strings[0] записываем первую строку
// в strings[1] записываем вторую строку
// в strings[2] записываем третью строку

strings[0] = (char*)a;
strings[1] = (char*)b;
strings[2] = (char*)c;

char res[128];

for (int pos1 = 0; pos1 < 3; pos1++)
{
    for (int pos2 = 0; pos2 < 3; pos2++)
    {
        for (int pos3 = 0l; pos3 < 3; pos3++)
        {
            if ((pos1 == pos2) || (pos1 == pos3) || (pos2 == pos3))
                continue;

            res[0] = '\0';
            strcat(res, strings[pos1]);
            strcat(res, strings[pos2]);
            strcat(res, strings[pos3]);

            printf("%s\n", res);
        }
    }
}

Есть ли какие-нибудь иные способы, при которых будет использоваться цикл?

→ Ссылка