#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
char wordList[] = "_cT68est aaa xyz abc_79d A_bcd usw8 bWort";
struct wordInformation
{
char const* pos;
std::size_t len;
};
std::vector<wordInformation> vec;
vec.reserve( sizeof(wordList) / 5 ); // Durchschnittliche Wortlänge +1
bool last_char = false;
for( auto p = wordList; p != wordList + sizeof(wordList) - 1; ++p )
{
if( !std::isspace(*p) )
{
if(!last_char)
{
vec.push_back({p, 1});
last_char = true;
}
else
++vec.back().len;
}
else if(last_char)
last_char = false;
}
std::sort( std::begin(vec), std::end(vec), [](wordInformation const& p1,
wordInformation const& p2)
{ return std::lexicographical_compare(p1.pos, p1.pos + p1.len,
p2.pos, p2.pos + p2.len); } );
char sortedWordList[sizeof(wordList)];
auto ptr = sortedWordList;
for( auto& info : vec )
{
while( info.len-- )
*ptr++ = *info.pos++;
*ptr++ = ' ';
}
sortedWordList[sizeof(sortedWordList)-1] = '\0';
std::cout << sortedWordList;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CgppbnQgbWFpbigpCnsKCWNoYXIgd29yZExpc3RbXSA9ICJfY1Q2OGVzdCBhYWEgeHl6IGFiY183OWQgQV9iY2QgdXN3OCBiV29ydCI7CgoJc3RydWN0IHdvcmRJbmZvcm1hdGlvbgoJewoJCWNoYXIgY29uc3QqIHBvczsKCQlzdGQ6OnNpemVfdCBsZW47Cgl9OwoKCXN0ZDo6dmVjdG9yPHdvcmRJbmZvcm1hdGlvbj4gdmVjOwoJdmVjLnJlc2VydmUoIHNpemVvZih3b3JkTGlzdCkgLyA1ICk7IC8vIER1cmNoc2Nobml0dGxpY2hlIFdvcnRsw6RuZ2UgKzEKCglib29sIGxhc3RfY2hhciA9IGZhbHNlOwoJZm9yKCBhdXRvIHAgPSB3b3JkTGlzdDsgcCAhPSB3b3JkTGlzdCArIHNpemVvZih3b3JkTGlzdCkgLSAxOyArK3AgKQoJewoJCWlmKCAhc3RkOjppc3NwYWNlKCpwKSApCgkJewoJCQlpZighbGFzdF9jaGFyKQoJCQl7CgkJCQl2ZWMucHVzaF9iYWNrKHtwLCAxfSk7CgkJCQlsYXN0X2NoYXIgPSB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJCSsrdmVjLmJhY2soKS5sZW47CgkJfQoJCWVsc2UgaWYobGFzdF9jaGFyKQoJCQlsYXN0X2NoYXIgPSBmYWxzZTsKCX0KCglzdGQ6OnNvcnQoIHN0ZDo6YmVnaW4odmVjKSwgc3RkOjplbmQodmVjKSwgW10od29yZEluZm9ybWF0aW9uIGNvbnN0JiBwMSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkSW5mb3JtYXRpb24gY29uc3QmIHAyKQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUocDEucG9zLCBwMS5wb3MgKyBwMS5sZW4sCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMi5wb3MsIHAyLnBvcyArIHAyLmxlbik7IH0gKTsKCgljaGFyIHNvcnRlZFdvcmRMaXN0W3NpemVvZih3b3JkTGlzdCldOwoKCWF1dG8gcHRyID0gc29ydGVkV29yZExpc3Q7Cglmb3IoIGF1dG8mIGluZm8gOiB2ZWMgKQoJewoJCXdoaWxlKCBpbmZvLmxlbi0tICkKCQkJKnB0cisrID0gKmluZm8ucG9zKys7CgoJCSpwdHIrKyA9ICcgJzsKCX0KCglzb3J0ZWRXb3JkTGlzdFtzaXplb2Yoc29ydGVkV29yZExpc3QpLTFdID0gJ1wwJzsKCXN0ZDo6Y291dCA8PCBzb3J0ZWRXb3JkTGlzdDsKfQo=