Как компилятор преобразует целое число в строку и наоборот - PullRequest
8 голосов
/ 19 августа 2011

Многие языки имеют функции для преобразования строки в целое число и наоборот.Так что там происходит?Какой алгоритм выполняется во время преобразования?

Я не спрашиваю на определенном языке, потому что я думаю, что он должен быть похожим во всех них.

Ответы [ 3 ]

14 голосов
/ 19 августа 2011

Чтобы преобразовать строку в целое число, возьмите каждый символ по очереди и, если он находится в диапазоне от 0 до 9, преобразуйте его в десятичный эквивалент. Обычно это просто вычитание значения символа «0». Теперь умножьте все предыдущие результаты на 10 и добавьте новое значение. Повторяйте, пока не останется никаких цифр. Если был знак «-» минус, инвертируйте результат.

Чтобы преобразовать целое число в строку, начните с обращения числа, если оно отрицательное. Разделите целое число на 10 и сохраните остаток. Преобразуйте остаток в символ, добавив символьное значение «0». Нажмите это в начало строки; Теперь повторите со значением, которое вы получили от деления. Повторяйте, пока разделенное значение не станет равным нулю. Поместите начальный знак «-» в минус, если число начиналось отрицательно.

Вот конкретные реализации в Python, который, на мой взгляд, является языком, наиболее близким к псевдокоду.

def string_to_int(s):
    i = 0
    sign = 1
    if s[0] == '-':
        sign = -1
        s = s[1:]
    for c in s:
        if not ('0' <= c <= '9'):
            raise ValueError
        i = 10 * i + ord(c) - ord('0')
    return sign * i

def int_to_string(i):
    s = ''
    sign = ''
    if i < 0:
        sign = '-'
        i = -i
    while True:
        remainder = i % 10
        i = i / 10
        s = chr(ord('0') + remainder) + s
        if i == 0:
            break
    return sign + s
1 голос
/ 19 августа 2011

Строка в целое число:

Многие (большинство) языков представляют строки на том или ином уровне в виде массива (или списка) символов, которые также являются короткими целыми числами.Сопоставьте числа, соответствующие числовым символам, с их числовым значением.Например, «0» в ascii представляется как 48. Таким образом, вы отображаете 48 на 0, 49 на 1 и так далее на 9.

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

Целое число в строку - более длительный процесс, включающий преобразование базы в 10.Предположим, что, поскольку большинство целых чисел имеют ограниченные биты (обычно 32 или 64), вы знаете, что в строке будет не более определенного числа символов (20?).Таким образом, вы можете настроить свой собственный сумматор и перебирать каждое место для каждого бита после вычисления его значения (2 ^ место).

1 голос
/ 19 августа 2011

Я бы не назвал это алгоритмом как таковым , но в зависимости от языка это будет включать преобразование символов в их интегральный эквивалент.Многие языки будут либо останавливаться на первом символе, который не может быть представлен как целое число (например, буква a), будут вслепую преобразовывать все символы в их значение ASCII (например, буква a становится 97), или будут игнорироватьсясимволы, которые не могут быть представлены как целые числа и конвертируют только те, которые могут - или возвращают 0 / пусто.Вы должны получить более конкретную информацию о фреймворке / языке, чтобы предоставить больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...