Рубрики

Напишите свой собственный atoi ()

Функция atoi () в C принимает строку (которая представляет целое число) в качестве аргумента и возвращает ее значение типа int. Таким образом, в основном функция используется для преобразования строкового аргумента в целое число.

Синтаксис:

int atoi(const char strn)

Параметры: функция принимает один параметр strn, который ссылается на строковый аргумент, который необходимо преобразовать в его целочисленный эквивалент.

Возвращаемое значение: Если strn является допустимым вводом, то функция возвращает эквивалентное целое число для переданного строкового номера. Если действительного преобразования не происходит, функция возвращает ноль.

Пример:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

  

int main()

{

    int val;

    char strn1[] = "12546";

  

    val = atoi(strn1);

    printf("String value = %s\n", strn1);

    printf("Integer value = %d\n", val);

  

    char strn2[] = "GeeksforGeeks";

    val = atoi(strn2);

    printf("String value = %s\n", strn2);

    printf("Integer value = %d\n", val);

  

    return (0);

}

Выход:

String value = 12546
Integer value = 12546
String value = GeeksforGeeks
Integer value = 0

Теперь давайте разберемся, как можно создать собственную функцию atoi (), поддерживаемую различными условиями:

  1. Ниже приводится простая реализация преобразования без учета какого-либо особого случая. Мы инициализируем результат как 0. Мы начинаем с первого символа и обновляем результат для каждого символа. С

    // Программа для реализации atoi () в C
    #include <stdio.h>

      
    // Простая функция atoi ()

    int myAtoi(char* str)

    {

        int res = 0; // Инициализировать результат

      

        // перебираем все символы входной строки и

        // обновить результат

        for (int i = 0; str[i] != '\0'; ++i)

            res = res * 10 + str[i] - '0';

      

        // вернуть результат.

        return res;

    }

      
    // Программа драйвера для проверки вышеуказанной функции

    int main()

    {

        char str[] = "89789";

        int val = myAtoi(str);

        printf("%d ", val);

        return 0;

    }

    C ++

    // Простая C ++ программа для реализации atoi
    #include <bits/stdc++.h>

    using namespace std;

      
    // Простая функция atoi ()

    int myAtoi(char* str)

    {

        int res = 0; // Инициализировать результат

      

        // перебираем все символы входной строки и

        // обновить результат

        for (int i = 0; str[i] != '\0'; ++i)

            res = res * 10 + str[i] - '0';

      

        // вернуть результат.

        return res;

    }

      
    // Код драйвера

    int main()

    {

        char str[] = "89789";

        int val = myAtoi(str);

        cout << val;

        return 0;

    }

      
    // Это код, предоставленный rathbhupendra

    питон

    # Python программа для реализации atoi

      
    # Простая функция atoi ()

    def myAtoi(string):

        res = 0

      

        # Перебирать все символы входной строки и

        # результат обновления

        for i in xrange(len(string)):

            res = res * 10 + (ord(string[i]) - ord('0'))

      

        return res

      
    # Драйверная программа

    string = "89789"

    print myAtoi(string)

      
    # Этот код предоставлен BHAVYA JAIN

    C #

    // Простая программа на C # для реализации
    // из Атои

    using System;

      

    class GFG {

      

        // Простая функция atoi ()

        static int myAtoi(string str)

        {

            int res = 0; // Инициализировать результат

      

            // Перебираем все символы

            // вводим строку и обновляем результат

            for (int i = 0; i < str.Length; ++i)

                res = res * 10 + str[i] - '0';

      

            // вернуть результат.

            return res;

        }

      

        // Программа драйвера для проверки вышеуказанной функции

        public static void Main()

        {

            string str = "89789";

            int val = myAtoi(str);

            Console.Write(val);

        }

    }

      
    // Этот код предоставлен Sam007.


    Выход:

    89789
  2. В приведенной ниже реализации обработаны отрицательные числа.
    C ++

    // C ++ программа для реализации atoi
    #include <bits/stdc++.h>

    using namespace std;

      
    // Простая функция atoi ()

    int myAtoi(char* str)

    {

        int res = 0; // Инициализировать результат

        int sign = 1; // Инициализировать знак как положительный

        int i = 0; // Инициализируем индекс первой цифры

      

        // Если число отрицательное, то обновляем знак

        if (str[0] == '-') {

            sign = -1;

            i++; // Также обновляем индекс первой цифры

        }

      

        // Перебираем все цифры и обновляем результат

        for (; str[i] != '\0'; ++i)

            res = res * 10 + str[i] - '0';

      

        // Возвращаем результат со знаком

        return sign * res;

    }

      
    // Код драйвера

    int main()

    {

        char str[] = "-123";

        int val = myAtoi(str);

        cout << val;

        return 0;

    }

      
    // Это код, предоставленный rathbhupendra

    С

    // AC программа для реализации атои
    #include <stdio.h>

      
    // Простая функция atoi ()

    int myAtoi(char* str)

    {

        int res = 0; // Инициализировать результат

        int sign = 1; // Инициализировать знак как положительный

        int i = 0; // Инициализируем индекс первой цифры

      

        // Если число отрицательное, то обновляем знак

        if (str[0] == '-') {

            sign = -1;

            i++; // Также обновляем индекс первой цифры

        }

      

        // Перебираем все цифры и обновляем результат

        for (; str[i] != '\0'; ++i)

            res = res * 10 + str[i] - '0';

      

        // Возвращаем результат со знаком

        return sign * res;

    }

      
    // Программа драйвера для проверки вышеуказанной функции

    int main()

    {

        char str[] = "-123";

        int val = myAtoi(str);

        printf("%d ", val);

        return 0;

    }

    питон

    # Python программа для реализации atoi

      
    # Простая функция atoi ()

    def myAtoi(string):

        res = 0

        # инициализировать знак как положительный

        sign = 1

        i = 0

      

        # если число отрицательное, обновите знак

        if string[0] == '-':

            sign = -1

            i+= 1

      

        # Перебирать все символы входной строки и обновлять результат

        for j in xrange(i, len(string)):

            res = res * 10 + (ord(string[j]) - ord('0'))

      

        return sign * res

      
    # Драйверная программа

    string = "-123"

    print myAtoi(string)

      
    # Этот код предоставлен BHAVYA JAIN

    C #

    // C # программа для реализации atoi

    using System;

      

    class GFG {

      

        // Простая функция atoi ()

        static int myAtoi(string str)

        {

      

            // Инициализировать результат

            int res = 0;

      

            // Инициализировать знак как положительный

            int sign = 1;

      

            // Инициализируем индекс первой цифры

            int i = 0;

      

            // Если число отрицательное, то

            // обновить знак

            if (str[0] == '-') {

                sign = -1;

      

                // Также обновляем индекс первого

                // цифра

                i++;

            }

      

            // перебирать все цифры

            // и обновляем результат

            for (; i < str.Length; ++i)

                res = res * 10 + str[i] - '0';

      

            // Возвращаем результат со знаком

            return sign * res;

        }

      

        // Программа драйвера для проверки вышеуказанной функции

        public static void Main()

        {

            string str = "-123";

            int val = myAtoi(str);

            Console.Write(val);

        }

    }

      
    // Этот код предоставлен Sam007.


    Выход:

    -123
  3. Эта реализация обрабатывает различные типы ошибок . Что если str равен NULL или str содержит нечисловые символы. Следующая реализация обрабатывает ошибки .
    C ++

    // Простая C ++ программа для реализации atoi

      
    #include <stdio.h>

      
    // Утилита для проверки, является ли x числовым

    bool isNumericChar(char x)

    {

        return (x >= '0' && x <= '9') ? true : false;

    }

      
    // Простая функция atoi (). Если данная строка содержит
    // любой недопустимый символ, тогда эта функция возвращает 0

    int myAtoi(char* str)

    {

        if (*str == '\0')

            return 0;

      

        int res = 0; // Инициализировать результат

        int sign = 1; // Инициализировать знак как положительный

        int i = 0; // Инициализируем индекс первой цифры

      

        // Если число отрицательное, то обновляем знак

        if (str[0] == '-') {

            sign = -1;

            i++; // Также обновляем индекс первой цифры

        }

      

        // Перебираем все цифры входной строки и обновляем результат

        for (; str[i] != '\0'; ++i) {

            if (isNumericChar(str[i]) == false)

                return 0; // Вы можете добавить несколько строк, чтобы написать сообщение об ошибке

            // в поток ошибок

            res = res * 10 + str[i] - '0';

        }

      

        // Возвращаем результат со знаком

        return sign * res;

    }

      
    // Программа драйвера для проверки вышеуказанной функции

    int main()

    {

        char str[] = "-134";

        int val = myAtoi(str);

        printf("%d ", val);

        return 0;

    }

    питон

    # Python программа для реализации atoi

      
    # Полезная функция для проверки, является ли x числовым

    def isNumericChar(x):

        if (x >= '0' and x <= '9'):

            return True

        return False

      
    # Простая функция atoi (). Если данная строка содержит
    # любой недопустимый символ, тогда эта функция возвращает 0

    def myAtoi(string):

        if len(string) == 0:

            return 0

      

        res = 0

        # инициализировать знак как положительный

        sign = 1

        i = 0

      

        # если число отрицательное, обновите знак

        if string[0] == '-':

            sign = -1

            i+= 1

      

        # Перебирать все символы входной строки и обновлять результат

        for j in xrange(i, len(string)):

            # Вы можете добавить несколько строк для записи сообщения об ошибке в поток ошибок

            if isNumericChar(string[j] == False):

                return 0

      

            res = res * 10 + (ord(string[j]) - ord('0'))

      

        return sign * res

      
    # Драйверная программа

    string = "-134"

    print myAtoi(string)

      
    # Этот код предоставлен BHAVYA JAIN

    Сложность времени: O (n) где n — количество символов во входной строке.

    Нам нужно обработать только четыре случая:

    • Отбрасывает все ведущие пробелы
    • знак числа
    • переполнение
    • Неверный Ввод

    Ниже приведен пробный запуск вышеуказанного подхода:

    Ниже приведена реализация вышеуказанного подхода:

    // Простая C ++ программа для реализации atoi
    #include <bits/stdc++.h>

      

    using namespace std;

    int myAtoi(const char* str)

    {

        int sign = 1, base = 0, i = 0;

        // если пробелы, то игнорировать.

        while (str[i] == ' ') {

            i++;

        }

        // знак числа

        if (str[i] == '-' || str[i] == '+') {

            sign = 1 - 2 * (str[i++] == '-');

        }

        // проверка правильности ввода

        while (str[i] >= '0' && str[i] <= '9') {

            // обработка теста переполнения

            if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) {

                if (sign == 1)

                    return INT_MAX;

                else

                    return INT_MIN;

            }

            base = 10 * base + (str[i++] - '0');

        }

        return base * sign;

    }

      

    int main()

    {

        char str[] = "  -123";

        int val = myAtoi(str);

        printf("%d ", val);

        return 0;

    }
    // Этот код предоставлен Йогеш Шукла.

    Выход :

    -123
    

    Сложность времени O (n), где n — длина строки.

Рекурсивная программа для atoi () .

Упражнение
Напишите свой выигранный atof (), который принимает строку (которая представляет значение с плавающей запятой) в качестве аргумента и возвращает его значение как double.

Эта статья составлена Абхай Рати . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Рекомендуемые посты:

Напишите свой собственный atoi ()

0.00 (0%) 0 votes