Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Name: Yoni Melki
- ID Number: 328788138
- Last Update: 11 Jul 2019
- This program is a new version of the funcion printf
- */
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- //PROTOTYPES
- void printFormattedIntegers(char* format, char* numbers);
- void int2bin(int n);
- int char2int(char *token);
- void int2rom(int n);
- //END OF PROTOTYPES
- void main()
- {
- char format[100];
- char numbers[100];
- gets(format);
- gets(numbers);
- printFormattedIntegers(format, numbers);
- }
- int char2int(char *p)
- /*
- Function that get a char and turn it to an int
- */
- {
- int n = 0;
- while ((*p < '0' || *p > '9') && *p != EOF)
- p++;
- while ('0' <= *p && *p <= '9' && *p != EOF)
- {
- n *= 10;
- n += *p - '0';
- p++;
- }
- return n;
- }
- void printFormattedIntegers(char* format, char* numbers)
- /*
- Function that gets 2 strings, and turn all the %d to an int from numbers[]
- %x to an hexadecimal number, %o to an octal number, %b to a binary number
- and %r to a roman number
- */
- {
- int i;
- char *token = numbers;
- char *p = format;
- int n;
- for (i = 0; *(p + i) != '\0'; i++)
- {
- if (*(p + i) != '%')
- printf("%c", *(p + i));
- else
- {
- n = char2int(token);
- while ('0' <= *token && *token <= '9')
- token++;
- while ((*token < '0' || *token > '9') && *token != EOF)
- token++;
- switch (*(p + i + 1))
- {
- case 'd': printf("%d", n); break;
- case 'o': printf("%o", n); break;
- case 'x': printf("%x", n); break;
- case 'b': int2bin(n); break;
- case 'r': int2rom(n); break;
- }
- p++;
- }
- }
- printf("\n");
- }
- void int2bin(int n)
- {
- int bin = 0;
- int pow = 1;
- while (n > 0)
- {
- bin += (n % 2)*pow;
- pow *= 10;
- n /= 2;
- }
- printf("%d", bin);
- }
- void int2rom(int num)
- {
- while (num != 0)
- {
- if (num >= 1000) // 1000 - m
- {
- printf("M");
- num -= 1000;
- }
- else if (num >= 900) // 900 - cm
- {
- printf("CM");
- num -= 900;
- }
- else if (num >= 500) // 500 - d
- {
- printf("D");
- num -= 500;
- }
- else if (num >= 400) // 400 - cd
- {
- printf("CD");
- num -= 400;
- }
- else if (num >= 100) // 100 - c
- {
- printf("C");
- num -= 100;
- }
- else if (num >= 90) // 90 - xc
- {
- printf("XC");
- num -= 90;
- }
- else if (num >= 50) // 50 - l
- {
- printf("L");
- num -= 50;
- }
- else if (num >= 40) // 40 - xl
- {
- printf("XL");
- num -= 40;
- }
- else if (num >= 10) // 10 - x
- {
- printf("X");
- num -= 10;
- }
- else if (num >= 9) // 9 - ix
- {
- printf("IX");
- num -= 9;
- }
- else if (num >= 5) // 5 - v
- {
- printf("V");
- num -= 5;
- }
- else if (num >= 4) // 4 - iv
- {
- printf("IV");
- num -= 4;
- }
- else if (num >= 1) // 1 - i
- {
- printf("I");
- num -= 1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement