/**************************************************************************/ // Отсортировать массив строк // /**************************************************************************/ # include # include # include # define uchar unsigned char static uchar SC[256] ; struct t_SC{ t_SC(void); }; t_SC SC1 ; struct t_Str { char str[50] ; } ; /**************************************************************************/ short Strcmp( char *Str1, char *Str2 ) { short i,c ; register uchar c1,c2 ; for( i=0 ; ; i++ ) { c1=(uchar)Str1[i] ; c2=(uchar)Str2[i] ; //if( c1==0 && c2==0 ) return 0 ; if( c1 || c2 ) ; else return 0 ; if( c1==c2 ) continue ; if( c1==0 ) return -1 ; if( c2==0 ) return 1 ; c = SC[c1] - SC[c2] ; if( c!=0 ) return c ; } } /**************************************************************************/ int strcmp1( const void *Str1, const void *Str2 ) { return Strcmp( ((t_Str *)Str1)->str,((t_Str *)Str2)->str ); } /**************************************************************************/ int main( void ) { long i,n ; char Str[100] ; t_Str *Mass ; FILE *fr ; fr=fopen( "input","r" ); n=0 ; while( 1 ) { if( EOF==fscanf(fr,"%s",Str) ) break ; n++ ; } fclose(fr); Mass=(t_Str *)calloc( n,sizeof(t_Str) ); fr=fopen( "input","r" ); n=0 ; while( 1 ) { if( EOF==fscanf(fr,"%s",Mass[n].str ) ) break ; n++ ; } qsort( Mass,n,sizeof(t_Str),strcmp1 ); Str[0]=0 ; for( i=0 ; i