Advertisement
strenget

Untitled

Dec 3rd, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int isLetter(char c) {
  5.     int ci = (int)c;
  6.     return (ci >= 49 && ci <= 57) || (ci>=65 && ci <=90) || (ci >= 97 && ci <=122);
  7. }
  8. int close (int c,  char *key) {
  9.     switch(c) {
  10.         case 100:
  11.             fprintf(stderr, "Error: Chybny vstup!\n");
  12.             free(key);
  13.             return 100;
  14.         case 0:
  15.             free(key);
  16.             return 0;
  17.     }
  18.     return c;
  19. }
  20.  
  21. void swap (char* a, char* b)
  22. {
  23.     char t = *a;*a = *b;*b = t;
  24. }
  25. int compare (const void *a, const void *b)
  26. {  return ( *(char *)a - *(char *)b ); }
  27. void Permut( char *key, int index )
  28. {
  29.     qsort( key, index, sizeof( key[8] ), compare ); //Sort ASII
  30.     for (;;){
  31.  
  32.         printf("%s", key);
  33.         int i  = index - 2  ;
  34.         while (i>=0) {
  35.            if (key[i] < key[i+1])
  36.               break;
  37.           --i;}
  38.         if ( i == -1 )
  39.             break;
  40.         else
  41.         {
  42.             int l=i+1;
  43.             int h = index -1;
  44.             int ceilIndex = l;
  45.             for (int j = l+1; j <= h; j++){
  46.             if (key[j] > key[i] && key[j] < key[ceilIndex])
  47.                 ceilIndex = j;
  48.             break;
  49.         }
  50.  
  51.             swap( key + i, key +ceilIndex );
  52.  
  53.             qsort( key + i + 1, index - i - 1, sizeof(key[8]), compare ); //Sort
  54.  
  55.         }
  56.     }
  57. }
  58. int main(int argc, char *argv[])
  59. {
  60.     int Maxsize=8;
  61.     int index=0;
  62.     char *key = malloc(sizeof(char)*Maxsize);
  63.     for (;;) {
  64.         scanf("%c", key+index);
  65.         if (key[0] == '\n')
  66.             {      
  67.                 return close(100,key);
  68.             }
  69.         if (key[index] == '\n'){
  70.             break;
  71.         }
  72.         if (!isLetter(key[index])){
  73.            
  74.             return close(100, key);
  75.         }
  76.         index++;
  77.     }
  78. Permut( key, index);
  79. return close(0, key);
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement