diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2021-10-24 18:47:28 +0200 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2021-10-24 18:47:28 +0200 |
| commit | 0bca634f7e70b05239f46f3bd40bb37468d67957 (patch) | |
| tree | c4c121dea59ff4183ffb78da4eba75b61f8c8891 /src/string.c | |
| parent | 1395dc42159d52ba36524fabe805897cd20bd01e (diff) | |
Fixing keyboard, changes to Makefile and string.h, trying to add heap...
Diffstat (limited to 'src/string.c')
| -rw-r--r-- | src/string.c | 83 |
1 files changed, 69 insertions, 14 deletions
diff --git a/src/string.c b/src/string.c index f48614f..b0c42f2 100644 --- a/src/string.c +++ b/src/string.c @@ -1,12 +1,10 @@ -#include<stdbool.h> -#include<stddef.h> -#include<stdint.h> +#include"types.h" size_t stringlen(char *str) { size_t i; + for(i=0;str[i]!='\0';i++) ; - i--; return i; } @@ -24,11 +22,17 @@ void stringcat(char *str1,char *str2) char *tmp=str1; while(*tmp) tmp++; while(*str2) *tmp++=*str2++; + *tmp=*str2; +} + +void stringcpy(char *str1,char *str2) +{ + for(size_t i=0;str2[i]!='\0';i++) str1[i]=str2[i]; } void stringrev(char *str) { - size_t i=stringlen(str); + size_t i=stringlen(str)-1; for(size_t j=0;j<i-j;j++) { @@ -38,21 +42,72 @@ void stringrev(char *str) } } -void itos(char *str,uint32_t num) -{ - size_t i; - for(i=0;num>0;num/=10,i++) str[i]='0'+num%10; - str[i]='\0'; - stringrev(str); -} - -uint32_t stoi(char *str) +uint32_t stoi(const char *str) { uint32_t num=0; + for(size_t i=0;str[i]!='\0';i++) { + if(str[i]<'0'||str[i]>'9') return num; num*=10; num+=str[i]-'0'; } + return num; } + +void itos(uint32_t num,char *str) +{ + if(num==0) stringcpy(str,"0"); + else + { + size_t i=0; + for(;num>0;num/=10,i++) str[i]='0'+num%10; + str[i]='\0'; + + stringrev(str); + } +} + +double stof(const char *str) +{ + double num=0; + + bool point=0; + uint32_t pow=1; + size_t i=0; + + for(;str[i]!='\0';i++) + { + if(str[i]=='.') + { + if(point) return num/pow; + point=1; + continue; + } + if(str[i]<'0'||str[i]>'9') return num/pow; + num*=10; + num+=str[i]-'0'; + if(point) pow*=10; + } + + return num/pow; +} + +const int decimals=7; +void ftos(double num, char *str) +{ + itos((uint32_t)num,str); + + stringcat(str,"."); + char c[2]; + c[1]='\0'; + + for(size_t i=0;i<decimals;i++) + { + num-=(uint32_t)num; + num*=10; + c[0]=(uint32_t)num+'0'; + stringcat(str,c); + } +} |
