Dennis M.
Dennis M.

Reputation: 107

How to convert string to integer without using library functions in Python?

I am trying to convert

a = "546"

to

a = 546

without using any library functions.

Upvotes: 5

Views: 15696

Answers (8)

Kirti
Kirti

Reputation: 1

a=input()
r=0
for i in a:
  r=r*10+(ord(i)-ord("0"))
print(r)
print(type(r))

Upvotes: -1

Mohideen bin Mohammed
Mohideen bin Mohammed

Reputation: 20187

def int(a):
ty = a.__class__.__name__
out = 0
di = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
      '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
if ty not in ("str", "int", "float", "bytes"):
    raise TypeError("unsupported format")
if a.__class__ == float:
    return a.__floor__()
elif a.__class__ == int:
    return a
else:
    ind = 0
    for val in a[::-1]:
        if val not in di:
            raise ValueError("invalid input")
        out += di[val]*(10**ind)
        ind += 1
        #print(out, di[val])
    return out
print(int("55"))
55

Upvotes: 0

Shyambeer Singh
Shyambeer Singh

Reputation: 328

def stringToInt(s):
    result = 0
    value = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    for digit in s:
        result = 10 * result + value[digit]

    return result

Upvotes: 1

Deep
Deep

Reputation: 1

astr = "1234"
num = 0
for index,val in enumerate(astr[::-1]):
    res = (ord(val) - ord('0')) * (10 ** index)
    num += (res)

Upvotes: -1

Stefan Pochmann
Stefan Pochmann

Reputation: 28636

The "purest" I can think of:

>>> a = "546"
>>> result = 0
>>> for digit in a:
        result *= 10
        for d in '0123456789':
            result += digit > d

>>> result
546

Or using @Ajax1234's dictionary idea if that's allowed:

>>> a = "546"
>>> value = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
>>> result = 0
>>> for digit in a:
        result = 10 * result + value[digit]

>>> result
546

Upvotes: 21

faizan baig
faizan baig

Reputation: 1303

You can loop through the string and perform the operation on each character using ord.

example:

a="546"
num=0
for i in a:
     num = num * 10 + ord(i) - ord('0')

Upvotes: -1

Ajax1234
Ajax1234

Reputation: 71461

You can keep a dictionary that stores the string and integer values of a numeric key, and then iterate over the string. While iterating over the string, you can use enumerate to keep track of the index and then raise 10 to that power minus 1 and then multiply by the corresponding key from the dictionary:

a = "546"
length = 0
for i in a:
   length += 1
d = {'1': 1, '0': 0, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8}
count = 0
counter = 0
for i in a:
   count += (10**(length-counter-1)*d[i])
   counter += 1
print(count)

Output:

546

Upvotes: 4

Nate Jenson
Nate Jenson

Reputation: 2794

The trick is that 546 = 500 + 40 + 6, or 5*10^2 + 4*10^1 + 6*10^0.

Note how the exponent is just the index (in reverse). Using that, you can generalize this approach into a function:

def strToInt(number):
    total = 0                             # this is where we accumulate the result
    pwr = len(number) - 1                 # start the exponent off as 2
    for digit in number:                  # digit is the str "5", "4", and "6"
        digitVal = ord(digit) - ord('0')  # using the ascii table, digitVal is the int value of 5,4, and 6.
        total += digitVal * (10 ** pwr)   # add 500, then 40, then 6
        pwr -= 1                          # make sure to drop the exponent down by one each time
    return total

And you can use it like so:

>>> strToInt("546")
546

Upvotes: 3

Related Questions