XAgent-Smith

Function_pointer_Sorting

Oct 1st, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. //Author-XAgent Smith
  2. //Date:Oct 1,2018
  3. /*Function pointer example using sort function in more then one way */
  4. #include<stdio.h>
  5. #include <dynamic.h>
  6.  
  7. typedef int  (*fptr)(const char*,const char*);
  8. int string_compare(const char *str1,const char *str2)
  9. {
  10.      if(*(str1+0)>(*(str2+0)))
  11.       return 1;
  12.        else
  13.        return 0;
  14. }
  15. char character_lower_case(char character)
  16. {
  17.            if(character>='A'&&character<='Z')
  18.             character=character+'a'-'A';
  19.             return character;
  20. }
  21. size_t string_length(const char *string)
  22. {
  23.       int Length=0;
  24.      
  25.         while((*(string++)!='\0'?++Length:
  26. 0));
  27.      return Length;
  28. }
  29. char *string_to_lower(const char *str)
  30. {
  31.     char *tmp=(char*)malloc(string_length(str)*sizeof(char)+1);
  32.      char *start=tmp;
  33.      while((*(tmp++)=character_lower_case(*(str++)))!='\0');
  34.        return start;
  35. }
  36. int compare_Ignore_cases(const char *string,const char *string0)
  37. {
  38.          char *t1=string_to_lower(string);
  39.          char *t2=string_to_lower(string0);
  40.          int result =string_compare(t1,t2);
  41.          safe_free(t1);
  42.          safe_free(t2);
  43.          return result;
  44. }
  45. int compare(const char *s1,const char *s2)
  46. {
  47.    return string_compare(s1,s2);
  48. }
  49. void sort(char *names[],size_t n,fptr opcode)
  50. {
  51.     int swap=1;
  52.     int i=0;
  53.     while(swap)
  54. {
  55.      swap=0;
  56.      for(i=0;i<n-1;i++)
  57.      {
  58.         if(opcode(names[i],names[i+1])>0)
  59.          {
  60.            swap=1;
  61.            char *temp=names[i];
  62.             names[i]=names[i+1];
  63.             names[i+1]=temp;
  64.         }
  65.     }
  66. }
  67. }
  68. void display_names(char **arr,size_t size)
  69. {
  70.         for(int i=0;i<size;i++)
  71.          printf("\n%s",*(arr+i));
  72. }
  73. int main()
  74. {
  75.     char *arr[]={"XAgent Smith","bop","Ted","Fanny","Hinata","Want_Hinata"};
  76.      sort(arr,6,compare_Ignore_cases);
  77.       display_names(arr,6);
  78. //printf("\n\nout:%c",character_lower_case('C'));
  79.        return 0;  
  80. }
Add Comment
Please, Sign In to add comment