This commit is contained in:
2021-02-01 23:28:24 +01:00
parent 9986d95dbb
commit 4673a23db7
11 changed files with 140 additions and 42 deletions

View File

@@ -21,13 +21,65 @@ int memset(char *dst, char data, int amount) {
return 0;
}
int itoa(int i, char *target) {
target[0] = (char) (i % 10 + '0');
target[1] = '\0';
if (i > 9) {
itoa(i / 10, target + 1);
int abs(int val) {
if (val >= 0) {
return val;
}
return 0;
return val * -1;
}
// next stolen form https://www.techiedelight.com/implement-itoa-function-in-c/
// inline function to swap two numbers
void swap(char *x, char *y) {
char t = *x; *x = *y; *y = t;
}
// function to reverse buffer[i..j]
char* reverse(char *buffer, int i, int j)
{
while (i < j)
swap(&buffer[i++], &buffer[j--]);
return buffer;
}
// Iterative function to implement itoa() function in C
char* itoa(int value, char* buffer, int base)
{
// invalid input
if (base < 2 || base > 32)
return buffer;
// consider absolute value of number
int n = abs(value);
int i = 0;
while (n)
{
int r = n % base;
if (r >= 10)
buffer[i++] = 65 + (r - 10);
else
buffer[i++] = 48 + r;
n = n / base;
}
// if number is 0
if (i == 0)
buffer[i++] = '0';
// If base is 10 and value is negative, the resulting string
// is preceded with a minus sign (-)
// With any other base, value is always considered unsigned
if (value < 0 && base == 10)
buffer[i++] = '-';
buffer[i] = '\0'; // null terminate string
// reverse the string and return it
return reverse(buffer, 0, i - 1);
}
int maxi(int a, int b) {

View File

@@ -12,7 +12,9 @@ int memcpy(char *dst, char *src, int amount);
int memset(char *dst, char data, int amount);
int itoa(int i, char *target);
char *itoa(int value, char *buffer, int base);
int abs(int val);
int maxi(int a, int b);

View File

@@ -18,7 +18,7 @@ char* readline(const char *prompt) {
char* result = malloc(RESULT_SIZE);
memset(result, 0, RESULT_SIZE);
for (int i = 0; i < RESULT_SIZE; ++i) {
for (int i = 0; i < RESULT_SIZE - 1; ++i) {
result[i] = getc();
kprint(&result[i]);
if (result[i] == '\n') {