Пользовательская функция преобразования строки в число типа int - C (СИ)
Формулировка задачи:
Задание: создать свою функцию работающую как atoi(функция преобразования строки в число типа int).
Прошу вас поправить мой код, т.к. сам не могу понять в чем проблема, с однозначными и двузначными числами работает правильно, а дальше через раз.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#define ten 10
int ft_atoi(char *str);
int main(){
char my_str='0';
puts("Write a number");
scanf("%s", &my_str);
printf("\nResult\t%d\n", ft_atoi(&my_str));
system("pause");
return 0;
}
int ft_atoi(char *str)
{
int i=0, chartoascii, *arr,res=0;
arr = (int*) malloc((strlen(str)+1)*sizeof(int));
while (str[i]!='\0')
{
chartoascii =(int)(str[i]);
if ((chartoascii>47)&&(chartoascii<58))
{
arr[i]=str[i]-'0';
i++;
}
else
{
break;
}
}
c=i;
i=0;
while ((arr[i]<10) && (arr[i]>=0))
{
res=res+(arr[i]*pow(ten,c-1));
i++;c--;
}
free(arr);
return res;
}Решение задачи: «Пользовательская функция преобразования строки в число типа int»
textual
Листинг программы
for(n=0; *str >= '0' && *str<='9'; str++) {
n = 10*n + *str - '0';
}
Объяснение кода листинга программы
В данном коде реализована пользовательская функция, которая выполняет преобразование строки в число типа int.
- Переменная
nинициализируется значением 0. Она будет использоваться для хранения результата преобразования. - В цикле for происходит перебор символов строки, начиная с первого символа и до тех пор, пока текущий символ больше или равен '0' и меньше '9'. Это условие позволяет перебрать только цифры.
- Для каждого символа выполняется следующая операция: к текущему значению переменной
nдобавляется 10 в степени, равной количеству цифр, которые были перебраны до текущего символа, и к этому результату прибавляется значение текущего символа, уменьшенное на '0'. Это позволяет преобразовать каждую цифру в соответствующее ей число и добавить его к общему результату. - После завершения цикла, в переменной
nбудет храниться результат преобразования строки в число типа int.