Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.64 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4.  
  5. size_t
  6. sterln(const char *str)
  7. {
  8.     const char *s;
  9.    
  10.     for(s=str; *s; ++s)
  11.     ;
  12.  
  13.     return (s-str);
  14. }
  15.  
  16. void bzero(void*s, size_t n)
  17. {
  18.     char *c = s;
  19.     size_t i;
  20.     for(i =0; i<n; ++i)
  21.         c[i] = '\0';
  22.  
  23. }
  24. char * inttostring(int number, int base)
  25. {  
  26.  
  27.     int i=0;
  28.    
  29.     char * str =  malloc(64*sizeof(char));
  30.     bzero(str, 64);
  31.     char * reversed =  malloc(64*sizeof(char)) ;
  32.     bzero(reversed, 64);  
  33.  
  34.     if(number == 0 )
  35.     {
  36.         str[0] = '0';
  37.         str[1] = '\0';
  38.         return str;
  39.     }
  40.  
  41.    
  42.         while(number!=0)
  43.         {
  44.             int r = number % base;
  45.             if(r<=9)
  46.             str[i] = r + '0' ;
  47.             else
  48.             str[i] = (r-10) + 'A';
  49.             i++;
  50.             number = number/base;
  51.         }
  52.  
  53.  
  54.    
  55.     int j=0;
  56.     for(int k= i-1; k>=0; k--, j++)
  57.         reversed[j] = str[k];
  58.  
  59.    
  60.  
  61.     return reversed;  
  62.  }  
  63. //string to int
  64. int ato(char *str, int base)
  65. {
  66.     unsigned int number1 =0;
  67.     int number =0;
  68.     if(base==16)
  69.     {
  70.         while(*str)
  71.         {
  72.             int byte = *str++;
  73.             if(byte >='0' && byte <= '9') byte = byte -'0';
  74.             else byte= byte - 'a' + 10;
  75.  
  76.             number = (number <<4) | (byte& 0xF);
  77.          
  78.         }
  79.     return number;  
  80.     }
  81.    
  82.     if(base==10 )
  83.     {for(int i=0; str[i]!='\0'; i++)
  84.             number = number*base + str[i] - '0'; return number;}
  85.     int pow =1;
  86.     if(base==2)
  87.     for(int i=0; str[i]!='\0'; i++)
  88.     {       for(int j=0; j<sterln(str)-i; j++)
  89.             { pow = pow * 10;   }
  90.         pow=pow/10;
  91.         number1 = number1 + pow*(str[i] - '0'); pow =1 ;}
  92.      
  93.     return number1;
  94. }
  95.  
  96.  
  97.  
  98.  
  99. void myprintf ( char* text, ...)
  100. {
  101.  
  102. void *arguments = &text;
  103.     arguments += sizeof(char *);
  104.  
  105.     for(int i=0; i<sterln(text); i++)
  106.     {
  107.  
  108.         if(text[i]!='%')
  109.         {
  110.         write(1, &text[i], 1 );
  111.         }
  112.         else
  113.         {
  114.             i++;
  115.         if(text[i] == 's')
  116.         {
  117.             char * arg1;
  118.             arg1 = *((char **)arguments);      
  119.             write(1, arg1, 64*sizeof(char));
  120.             arguments+=sizeof(char *) ;
  121.             continue;
  122.         }
  123.         if(text[i] == 'x')
  124.         {
  125.             char * buffer = malloc(64*sizeof(char));
  126.             bzero(buffer, 64);
  127.             int arg2 = *((int *)arguments);
  128.             buffer = inttostring(arg2,16);
  129.             write(1, buffer, 64*sizeof(char));
  130.             arguments+=sizeof(int) ;
  131.             continue;
  132.            
  133.         }
  134.         if(text[i] == 'b')
  135.         {
  136.             char * buffer = malloc(64*sizeof(char));
  137.             bzero(buffer, 64);
  138.             unsigned int arg2 = *((unsigned int *)arguments);
  139.             buffer = inttostring(arg2,2);
  140.             write(1, buffer,64* sizeof(char));
  141.             arguments+=sizeof(unsigned int) ;
  142.             continue;
  143.        
  144.         }
  145.         if(text[i] == 'd')
  146.         {
  147.             char * buffer = malloc(64*sizeof(char));
  148.             bzero(buffer, 64);
  149.             int arg2 = *((int *)arguments);
  150.             buffer = inttostring(arg2,10);
  151.             write(1, buffer, 64*sizeof(char));
  152.             arguments+=sizeof(int) ;
  153.             continue;
  154.         }
  155.         }
  156.        
  157.  
  158.     }
  159. }
  160.  
  161. char* myscanf( char* text , ... )
  162. {
  163.    
  164. void *arguments = &text;
  165. arguments +=sizeof(char*);  
  166.  
  167.    
  168. for(int i=0; i<sterln(text); i++)
  169. {
  170.     if(text[i]=='%')
  171.     {  
  172.         char * buffer = malloc(64*sizeof(char));
  173.         bzero(buffer, 64);  
  174.         read(0, buffer, 64*sizeof(char));
  175.         buffer[sterln(buffer) -1] = '\0';
  176.        
  177.         i++;
  178.    
  179.         if(text[i] == 's')
  180.         {    
  181.            
  182.  
  183.             **((char ***)arguments) = buffer;
  184.             arguments+=sizeof(char **) ;
  185.                
  186.         }
  187.         else if(text[i] == 'b')
  188.  
  189.         {
  190.            
  191.             **((unsigned int **)arguments) = ato(buffer,2);    
  192.             arguments+=sizeof(unsigned int *) ;
  193.                
  194.    
  195.         }
  196.         else if(text[i] == 'd')
  197.         {
  198.            
  199.             **((int **)arguments) = ato(buffer, 10);    
  200.             arguments+=sizeof(int*) ;
  201.            
  202.         }
  203.         else if(text[i] == 'x')
  204.         {
  205.            
  206.             **((int **)arguments) = ato(buffer,16);    
  207.             arguments+=sizeof(int *) ;
  208.    
  209.  
  210.         }  
  211.        
  212.     }
  213.    
  214. }    
  215. }
  216.  
  217. int main()
  218. {
  219. char *a;
  220. int b;
  221. int c;
  222. unsigned int x;
  223.  
  224. myscanf("%s%d",&a,&c);
  225. myprintf("%d%s", c, a);
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement