diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
| commit | c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch) | |
| tree | 3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /rushs/evalexpr/my_atoi | |
add: graphs et rushs
Diffstat (limited to 'rushs/evalexpr/my_atoi')
| -rw-r--r-- | rushs/evalexpr/my_atoi/my_atoi.c | 61 | ||||
| -rw-r--r-- | rushs/evalexpr/my_atoi/my_atoi.h | 8 |
2 files changed, 69 insertions, 0 deletions
diff --git a/rushs/evalexpr/my_atoi/my_atoi.c b/rushs/evalexpr/my_atoi/my_atoi.c new file mode 100644 index 0000000..ca185a5 --- /dev/null +++ b/rushs/evalexpr/my_atoi/my_atoi.c @@ -0,0 +1,61 @@ +#include "my_atoi.h" + +int my_atoi(const char *str) +{ + int res = 0; + + // str error check + if (str == NULL || *str == '0') + { + return 0; + } + + // trim whitespaces + for (; *str && *str == ' '; str++) + { + continue; + } + + // move to end of str + size_t l; + for (l = 0; str[l]; l++) + { + continue; + } + l--; + + // prepare for calculations + int factor = 1; + + // actual conversion of up to the second element of str (potential sign) + for (; l > 0; l--) + { + char val = str[l]; + if (val < '0' || val > '9') + { + return 0; + } + val -= '0'; + res += val * factor; + + factor *= 10; + } + + // l should be 0 by now + if (str[l] == '-') + { + return -res; + } + else if (str[l] != '+') + { + int val = str[l]; + if (val < '0' || val > '9') + { + return 0; + } + val -= '0'; + return res + val * factor; + } + + return res; +} diff --git a/rushs/evalexpr/my_atoi/my_atoi.h b/rushs/evalexpr/my_atoi/my_atoi.h new file mode 100644 index 0000000..b520d09 --- /dev/null +++ b/rushs/evalexpr/my_atoi/my_atoi.h @@ -0,0 +1,8 @@ +#ifndef MY_ATOI_H +#define MY_ATOI_H + +#include <stddef.h> + +int my_atoi(const char *str); + +#endif /* ! MY_ATOI_H */ |
