diff --git a/holberton.h b/holberton.h index c1061e6..e4dcc14 100644 --- a/holberton.h +++ b/holberton.h @@ -29,6 +29,7 @@ int _abs(int n); void rev_string(char *s); char *itoa(int value, char *buffer, int base); char *unsigned_itoa(unsigned int value, char *buffer, int base); +char *string_toupper(char *a); /* End string tools*/ @@ -38,6 +39,11 @@ int printString(va_list args); int printPercentage(va_list args); int printInteger(va_list args); int printBinary(va_list args); + +int printUnsignedDecimal(va_list args); +int printUnsignedOctal(va_list args); +int printUnsignedHex(va_list args); +int printUnsignedHexUpper(va_list args); /* End print library */ int (*get_print(const char *format))(va_list); diff --git a/string-tools.c b/string-tools.c index bcf9ff0..180fa98 100644 --- a/string-tools.c +++ b/string-tools.c @@ -104,7 +104,7 @@ char *unsigned_itoa(unsigned int value, char *buffer, int base) { r = n % base; if (r >= 10) - buffer[i++] = 65 + (r - 10); + buffer[i++] = 97 + (r - 10); else buffer[i++] = 48 + r; n /= base; @@ -117,3 +117,22 @@ char *unsigned_itoa(unsigned int value, char *buffer, int base) rev_string(buffer); return (buffer); } + + +/** + * *string_toupper - Changes all lowercase letters of a string to uppercase + * @a: Pointer to a char array char[] + * Return: string uppercase + */ +char *string_toupper(char *a) +{ + int i = 0; + + while (a[i] != '\0') + { + if (a[i] >= 'a' && a[i] <= 'z') + a[i] -= 32; + i++; + } + return (a); +} diff --git a/struct_p.c b/struct_p.c index 52b84f0..48732ae 100644 --- a/struct_p.c +++ b/struct_p.c @@ -16,6 +16,10 @@ int (*get_print(const char *format))(va_list) {"d", printInteger}, {"i", printInteger}, {"b", printBinary}, + {"u", printUnsignedDecimal}, + {"o", printUnsignedOctal}, + {"x", printUnsignedHex}, + {"X", printUnsignedHexUpper}, {NULL, NULL} }; int i; diff --git a/test/main-holb.c b/test/main-holb.c index 1015b3e..d660310 100644 --- a/test/main-holb.c +++ b/test/main-holb.c @@ -64,5 +64,18 @@ int main(void) len = _printf("%b", 4294967295); _printf("\nLen of the previos: %d\n", len); + len = _printf("%u", 4294967295); + _printf("\nLen of the previos: %d\n", len); + + len = _printf("%o", 4294967295); + _printf("\nLen of the previos: %d\n", len); + + len = _printf("%x", 4294967295); + _printf("\nLen of the previos: %d\n", len); + + len = _printf("%X", 4294967295); + _printf("\nLen of the previos: %d\n", len); + + return (0); } diff --git a/unsigned_types.c b/unsigned_types.c new file mode 100644 index 0000000..7cd1daa --- /dev/null +++ b/unsigned_types.c @@ -0,0 +1,79 @@ +#include "holberton.h" + +/** + * printUnsignedDecimal - Prints an unsigned int + * @args: Argument passed + * + * Return: length of data + */ +int printUnsignedDecimal(va_list args) +{ + char buff[40]; + char *str; + unsigned int num = va_arg(args, unsigned int); + int size; + + str = unsigned_itoa(num, buff, 10); + size = _strlen(str); + + return (write(1, str, size)); +} + +/** + * printUnsignedOctal - Prints an unsigned octal + * @args: Argument passed + * + * Return: length of data + */ +int printUnsignedOctal(va_list args) +{ + char buff[40]; + char *str; + int num = va_arg(args, int); + int size; + + str = unsigned_itoa(num, buff, 8); + size = _strlen(str); + + return (write(1, str, size)); +} + + + +/** + * printUnsignedHex - Prints an unsigned hex + * @args: Argument passed + * + * Return: length of data + */ +int printUnsignedHex(va_list args) +{ + char buff[40]; + char *str; + int num = va_arg(args, int); + int size; + + str = unsigned_itoa(num, buff, 16); + size = _strlen(str); + + return (write(1, str, size)); +} + +/** + * printUnsignedHexUpper - Prints an unsigned hex upper + * @args: Argument passed + * + * Return: length of data + */ +int printUnsignedHexUpper(va_list args) +{ + char buff[33]; + char *str; + int num = va_arg(args, int); + int size; + + str = string_toupper(unsigned_itoa(num, buff, 16)); + size = _strlen(str); + + return (write(1, str, size)); +}