#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
char wordList[] = "cTest aaa xyz abcd Abcd usw 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); ++p )
{
if( std::isalpha(*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+CgppbnQgbWFpbigpCnsKCWNoYXIgd29yZExpc3RbXSA9ICJjVGVzdCBhYWEgeHl6IGFiY2QgQWJjZCB1c3cgYldvcnQiOwoKCXN0cnVjdCB3b3JkSW5mb3JtYXRpb24KCXsKCQljaGFyIGNvbnN0KiBwb3M7CgkJc3RkOjpzaXplX3QgbGVuOwoJfTsKCglzdGQ6OnZlY3Rvcjx3b3JkSW5mb3JtYXRpb24+IHZlYzsKCXZlYy5yZXNlcnZlKCBzaXplb2Yod29yZExpc3QpIC8gNSApOyAvLyBEdXJjaHNjaG5pdHRsaWNoZSBXb3J0bMOkbmdlICsxCgoJYm9vbCBsYXN0X2NoYXIgPSBmYWxzZTsKCWZvciggYXV0byBwID0gd29yZExpc3Q7IHAgIT0gd29yZExpc3QgKyBzaXplb2Yod29yZExpc3QpOyArK3AgKQoJewoJCWlmKCBzdGQ6OmlzYWxwaGEoKnApICkKCQl7CgkJCWlmKCFsYXN0X2NoYXIpCgkJCXsKCQkJCXZlYy5wdXNoX2JhY2soe3AsIDF9KTsKCQkJCWxhc3RfY2hhciA9IHRydWU7CgkJCX0KCQkJZWxzZQoJCQkJKyt2ZWMuYmFjaygpLmxlbjsKCQl9CgkJZWxzZSBpZihsYXN0X2NoYXIpCgkJCWxhc3RfY2hhciA9IGZhbHNlOwoJfQoKCXN0ZDo6c29ydCggc3RkOjpiZWdpbih2ZWMpLCBzdGQ6OmVuZCh2ZWMpLCBbXSh3b3JkSW5mb3JtYXRpb24gY29uc3QmIHAxLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRJbmZvcm1hdGlvbiBjb25zdCYgcDIpCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZShwMS5wb3MsIHAxLnBvcyArIHAxLmxlbiwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyLnBvcywgcDIucG9zICsgcDIubGVuKTsgfSApOwoKCWNoYXIgc29ydGVkV29yZExpc3Rbc2l6ZW9mKHdvcmRMaXN0KV07CgoJYXV0byBwdHIgPSBzb3J0ZWRXb3JkTGlzdDsKCWZvciggYXV0byYgaW5mbyA6IHZlYyApCgl7CgkJd2hpbGUoIGluZm8ubGVuLS0gKQoJCQkqcHRyKysgPSAqaW5mby5wb3MrKzsKCQkqcHRyKysgPSAnICc7Cgl9CgoJc29ydGVkV29yZExpc3Rbc2l6ZW9mKHNvcnRlZFdvcmRMaXN0KS0xXSA9ICdcMCc7CglzdGQ6OmNvdXQgPDwgc29ydGVkV29yZExpc3Q7Cn0K