C++ – Sortowanie słów w zdaniu na podstawie tablic znaków

W związku z prośbami o przykładowe rozwiązanie problemu polegającym na sortowaniu słów oraz przekazami, że jest to złożony problem, poniżej przedstawiam jedno z możliwych rozwiązań. Zgodnie z prośbą, w rozwiązaniu tym nie są stosowane żadne dodatkowe funkcje, nie są również używane zmienne typu string.

Problematyka
Zaimplementować funkcję void sortujSlowa(char* zdanie), która drukuje na standardowym wyjściu posortowane (w kolejności rosnącej) wyrazy zapisane w ciągu znaków zdanie.

#include <iostream>
using namespace std;
 
bool wieksze(char* &slowo1, char* &slowo2){
    int i;
    for (i=0; slowo1[i]!='\0' && slowo2[i]!='\0'; i++){
        if(slowo1[i]<slowo2[i])
            return false;
        else if(slowo1[i]>slowo2[i])
            return true;
    }
    if(slowo1[i]=='\0')
        return false;
    return true;
}
 
void sortujSlowa(char* zdanie){
    int iSpacje = 1;
    int iDl = 0, iMaxDl = 0;
    for (int i=0; zdanie[i]!='\0'; i++){
        if (zdanie[i]==' '){
            iSpacje++;
            if (iDl > iMaxDl)
                iMaxDl = iDl;
            iDl = 0;
        } else
            iDl++;
    }
 
    char** tabSlow = new char*[iSpacje];
    for (int i=0; i<iSpacje; tabSlow[i++] = new char[iDl+1]);
 
    int iSlowa=0;
    iDl=0;
 
    for (int i=0; zdanie[i]!='\0'; i++){
        if (zdanie[i]==' '){
            tabSlow[iSlowa][iDl]='\0';
            iSlowa++; iDl=0;
        } else {
            tabSlow[iSlowa][iDl++]=zdanie[i];
        }
    }
    tabSlow[iSlowa][iDl]='\0';
 
    for (int i=0; i<iSpacje; i++){
        cout << i+1 <<" |"<< tabSlow[i] << "| "<< endl;
    }
 
    for (iSlowa=iSpacje; iSlowa>1; iSlowa--){
        for (int i=0; i<iSlowa-1; i++){
            if (wieksze(tabSlow[i], tabSlow[i+1])){
                char* tmpAdr = tabSlow[i];
                tabSlow[i] = tabSlow[i+1];
                tabSlow[i+1] = tmpAdr;
            }
        }
    }
 
    cout << "Po sortowaniu"<<endl;
    for (int i=0; i<iSpacje; i++){
        cout << i+1 <<" |"<< tabSlow[i] << "| "<< endl;
    }
 
    for (int i=0; i<iSpacje; delete[] tabSlow[i++]);
    delete[] tabSlow;
}
 
int main()
{
    sortujSlowa("ala ma kota i psa");
    return 0;
}