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

## Question:

I am trying to convert

``````a = "546"
``````

to

``````a = 546
``````

without using any library functions.

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
``````

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
``````

And you can use it like so:

``````>>> strToInt("546")
546
``````

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
``````

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')
``````
``````astr = "1234"
num = 0
for index,val in enumerate(astr[::-1]):
res = (ord(val) - ord('0')) * (10 ** index)
num += (res)
``````
``````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
``````
``````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
``````
``````a=input()
r=0
for i in a:
r=r*10+(ord(i)-ord("0"))
print(r)
print(type(r))
``````
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.