#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* einlesen(int);
int charsort(const void*,const void*);

int main (void)
{
    enum { LAENGE = 5 };
	
    char *z1;
    char *z2;

    printf("In diesem Programm koennen Sie 2 kleingeschriebene Zeichenketten mit jeweils\n"\
           "maximal %d Zeichen lexikalisch sortieren lassen.\n",LAENGE-1);		
		
    z1 = einlesen(LAENGE);
		
    if (z1==NULL)
    {
        puts("\n\nEs konnte kein ausreichender Speicher zur Verfuegung gestellt werden.\n"\
             "Das Programm wird beendet.");
        return 1;
    }
	
    z2 = einlesen(LAENGE);
		
    if (z2==NULL)
    {
        puts("\n\nEs konnte kein ausreichender Speicher zur Verfuegung gestellt werden.\n"\
             "Das Programm wird beendet.");
        free(z1);
        return 1;
    }
		
    puts("\nDie eingegebene Reihenfolge lautet:");
    puts(z1);
    puts(z2);

    /* Sortieren der Zeichenketten lexikalisch */
    qsort(z1, strlen(z1), 1, charsort);
    qsort(z2, strlen(z2), 1, charsort);
        
    puts("\nDie sortierte Reihenfolge lautet:");
    puts(z1);
    puts(z2);
        
    if( strcmp(z1,z2)==0 )
    {
    	puts("\nDie beiden Zeichenkette sind gleich.");
    }
    else
    {
    	puts("\nDie beiden Zeichenkette sind ungleich.");
    }
        
    free(z1);  /* Freigeben des Speicherplatzes */
    free(z2);  /* Freigeben des Speicherplatzes */

    return 0; 
}

char* einlesen(int maxlaenge) 
{
    char *zeichenkette = malloc(maxlaenge);
    
    if( zeichenkette!=NULL )
    {
    	int c, start;
    	printf("Bitte geben sie eine Zeichenkette mit maximal %d Zeichen ein: ",maxlaenge-1);
    
    	/* Einlesen einer beliebigen Zeichenkette mit Sonderzeichen ohne <ENTER> */
    	for(start=0; (start<maxlaenge-1) && (((c=getchar()) != EOF) && c!='\n') ;start++)
    	{
        	zeichenkette[start]=c;
    	}
    	if( start == maxlaenge-1 )
    	{
    	    while( ((c=getchar()) != EOF) && c!='\n' );
    	}
    
    	/* Hinzufügen eines Nullbytes an die letzte Stelle */
    	zeichenkette[start] = '\0';
    }

    return zeichenkette;
}

int charsort(const void *a,const void *b)
{
    const char *x = a, *y = b;
    if( *x < *y )
        return -1;
    else
    if( *x > *y )
        return 1;
    else
        return 0;
}
