Пользовательская функция преобразования строки в число типа 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.

  1. Переменная n инициализируется значением 0. Она будет использоваться для хранения результата преобразования.
  2. В цикле for происходит перебор символов строки, начиная с первого символа и до тех пор, пока текущий символ больше или равен '0' и меньше '9'. Это условие позволяет перебрать только цифры.
  3. Для каждого символа выполняется следующая операция: к текущему значению переменной n добавляется 10 в степени, равной количеству цифр, которые были перебраны до текущего символа, и к этому результату прибавляется значение текущего символа, уменьшенное на '0'. Это позволяет преобразовать каждую цифру в соответствующее ей число и добавить его к общему результату.
  4. После завершения цикла, в переменной n будет храниться результат преобразования строки в число типа int.

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы