#include <stdlib.h>
#include <string.h>
#include <stdio.h>
// Сравнение слов - через указатели на указатели
int wordsCmp(const void* a, const void* b)
{
const char * c = *(const char **)a;
const char * d = *(const char **)b;
}
char * sortIt(const char * str)
{
// Находим все слова - указатели на них. Их никак не больше половины длины строки.
const char * c = str;
int idx = 0;
while(*c == ' ') ++c;
words[idx++] = c++;
for(;*c;++c)
if (*c != ' ' && *(c-1) == ' ') words[idx++] = c;
// Сортировка массива указателей
qsort((void*)words
,idx
,sizeof(char*),wordsCmp
);
// Копия строки (чтоб нужной длины была
char *z = s;
*s = 0;
// Запись слов в новую строку
for(int i = 0; i < idx; ++i)
{
for(const char * t = words[i]; *t && *t != ' ';)
*z++ = *t++;
if (i < idx-1) *z++ = ' ';
}
*z = 0;
return s;
}
int main()
{
char str[] = "Sorry I can not write this simple program";
char * res = sortIt(str);
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKLy8g0KHRgNCw0LLQvdC10L3QuNC1INGB0LvQvtCyIC0g0YfQtdGA0LXQtyDRg9C60LDQt9Cw0YLQtdC70Lgg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LgKaW50IHdvcmRzQ21wKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCnsKICAgIGNvbnN0IGNoYXIgKiBjID0gKihjb25zdCBjaGFyICoqKWE7CiAgICBjb25zdCBjaGFyICogZCA9ICooY29uc3QgY2hhciAqKiliOwogICAgcmV0dXJuIHN0cmNtcChjLGQpOwp9CgpjaGFyICogc29ydEl0KGNvbnN0IGNoYXIgKiBzdHIpCnsKICAgIC8vINCd0LDRhdC+0LTQuNC8INCy0YHQtSDRgdC70L7QstCwIC0g0YPQutCw0LfQsNGC0LXQu9C4INC90LAg0L3QuNGFLiDQmNGFINC90LjQutCw0Log0L3QtSDQsdC+0LvRjNGI0LUg0L/QvtC70L7QstC40L3RiyDQtNC70LjQvdGLINGB0YLRgNC+0LrQuC4KICAgIGNvbnN0IGNoYXIgKiogd29yZHMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIqKSpzdHJsZW4oc3RyKS8yKTsKICAgIGNvbnN0IGNoYXIgKiBjID0gc3RyOwogICAKICAgIGludCBpZHggPSAwOwogICAgd2hpbGUoKmMgPT0gJyAnKSArK2M7CiAgICB3b3Jkc1tpZHgrK10gPSBjKys7CiAgICBmb3IoOypjOysrYykKICAgICAgICBpZiAoKmMgIT0gJyAnICYmICooYy0xKSA9PSAnICcpIHdvcmRzW2lkeCsrXSA9IGM7CgogICAgLy8g0KHQvtGA0YLQuNGA0L7QstC60LAg0LzQsNGB0YHQuNCy0LAg0YPQutCw0LfQsNGC0LXQu9C10LkKICAgIHFzb3J0KCh2b2lkKil3b3JkcyxpZHgsc2l6ZW9mKGNoYXIqKSx3b3Jkc0NtcCk7CgogICAgLy8g0JrQvtC/0LjRjyDRgdGC0YDQvtC60LggKNGH0YLQvtCxINC90YPQttC90L7QuSDQtNC70LjQvdGLINCx0YvQu9CwCiAgICBjaGFyICogcyA9IG1hbGxvYyhzdHJsZW4oc3RyKSsxKTsKICAgIGNoYXIgKnogPSBzOwogICAgKnMgPSAwOwogICAgLy8g0JfQsNC/0LjRgdGMINGB0LvQvtCyINCyINC90L7QstGD0Y4g0YHRgtGA0L7QutGDCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgaWR4OyArK2kpCiAgICB7CiAgICAgICAgZm9yKGNvbnN0IGNoYXIgKiB0ID0gd29yZHNbaV07ICp0ICYmICp0ICE9ICcgJzspCiAgICAgICAgICAgICp6KysgPSAqdCsrOwogICAgICAgIGlmIChpIDwgaWR4LTEpICp6KysgPSAnICc7CiAgICB9CiAgICAqeiA9IDA7CgoKICAgIGZyZWUod29yZHMpOwogICAgcmV0dXJuIHM7Cn0KCmludCBtYWluKCkKewogICAgY2hhciBzdHJbXSA9ICJTb3JyeSBJIGNhbiBub3Qgd3JpdGUgdGhpcyBzaW1wbGUgcHJvZ3JhbSI7CiAgICBwcmludGYoIiVzXG4iLCBzdHIpOwogICAgY2hhciAqIHJlcyA9IHNvcnRJdChzdHIpOwogICAgcHJpbnRmKCIlc1xuIiwgcmVzKTsKICAgIGZyZWUocmVzKTsKfQo=