Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- size_t
- sterln(const char *str)
- {
- const char *s;
- for(s=str; *s; ++s)
- ;
- return (s-str);
- }
- void bzero(void*s, size_t n)
- {
- char *c = s;
- size_t i;
- for(i =0; i<n; ++i)
- c[i] = '\0';
- }
- char * inttostring(int number, int base)
- {
- int i=0;
- char * str = malloc(64*sizeof(char));
- bzero(str, 64);
- char * reversed = malloc(64*sizeof(char)) ;
- bzero(reversed, 64);
- if(number == 0 )
- {
- str[0] = '0';
- str[1] = '\0';
- return str;
- }
- while(number!=0)
- {
- int r = number % base;
- if(r<=9)
- str[i] = r + '0' ;
- else
- str[i] = (r-10) + 'A';
- i++;
- number = number/base;
- }
- int j=0;
- for(int k= i-1; k>=0; k--, j++)
- reversed[j] = str[k];
- return reversed;
- }
- //string to int
- int ato(char *str, int base)
- {
- unsigned int number1 =0;
- int number =0;
- if(base==16)
- {
- while(*str)
- {
- int byte = *str++;
- if(byte >='0' && byte <= '9') byte = byte -'0';
- else byte= byte - 'a' + 10;
- number = (number <<4) | (byte& 0xF);
- }
- return number;
- }
- if(base==10 )
- {for(int i=0; str[i]!='\0'; i++)
- number = number*base + str[i] - '0'; return number;}
- int pow =1;
- if(base==2)
- for(int i=0; str[i]!='\0'; i++)
- { for(int j=0; j<sterln(str)-i; j++)
- { pow = pow * 10; }
- pow=pow/10;
- number1 = number1 + pow*(str[i] - '0'); pow =1 ;}
- return number1;
- }
- void myprintf ( char* text, ...)
- {
- void *arguments = &text;
- arguments += sizeof(char *);
- for(int i=0; i<sterln(text); i++)
- {
- if(text[i]!='%')
- {
- write(1, &text[i], 1 );
- }
- else
- {
- i++;
- if(text[i] == 's')
- {
- char * arg1;
- arg1 = *((char **)arguments);
- write(1, arg1, 64*sizeof(char));
- arguments+=sizeof(char *) ;
- continue;
- }
- if(text[i] == 'x')
- {
- char * buffer = malloc(64*sizeof(char));
- bzero(buffer, 64);
- int arg2 = *((int *)arguments);
- buffer = inttostring(arg2,16);
- write(1, buffer, 64*sizeof(char));
- arguments+=sizeof(int) ;
- continue;
- }
- if(text[i] == 'b')
- {
- char * buffer = malloc(64*sizeof(char));
- bzero(buffer, 64);
- unsigned int arg2 = *((unsigned int *)arguments);
- buffer = inttostring(arg2,2);
- write(1, buffer,64* sizeof(char));
- arguments+=sizeof(unsigned int) ;
- continue;
- }
- if(text[i] == 'd')
- {
- char * buffer = malloc(64*sizeof(char));
- bzero(buffer, 64);
- int arg2 = *((int *)arguments);
- buffer = inttostring(arg2,10);
- write(1, buffer, 64*sizeof(char));
- arguments+=sizeof(int) ;
- continue;
- }
- }
- }
- }
- char* myscanf( char* text , ... )
- {
- void *arguments = &text;
- arguments +=sizeof(char*);
- for(int i=0; i<sterln(text); i++)
- {
- if(text[i]=='%')
- {
- char * buffer = malloc(64*sizeof(char));
- bzero(buffer, 64);
- read(0, buffer, 64*sizeof(char));
- buffer[sterln(buffer) -1] = '\0';
- i++;
- if(text[i] == 's')
- {
- **((char ***)arguments) = buffer;
- arguments+=sizeof(char **) ;
- }
- else if(text[i] == 'b')
- {
- **((unsigned int **)arguments) = ato(buffer,2);
- arguments+=sizeof(unsigned int *) ;
- }
- else if(text[i] == 'd')
- {
- **((int **)arguments) = ato(buffer, 10);
- arguments+=sizeof(int*) ;
- }
- else if(text[i] == 'x')
- {
- **((int **)arguments) = ato(buffer,16);
- arguments+=sizeof(int *) ;
- }
- }
- }
- }
- int main()
- {
- char *a;
- int b;
- int c;
- unsigned int x;
- myscanf("%s%d",&a,&c);
- myprintf("%d%s", c, a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement