I have the following code in Julia 1.4.2
temp = zeros(Int64, length(input_string))
i = 1
while i< length(input_string)
temp[i] = input_string[i]
i += 1
end
Using input_string = "200"
I would expect this to return temp = [2 0 0]
, but for some reason I return a 3 element Array{Int64,1} with values [50, 48, 0].
Is there a way for me to understand this?
There are several things to this:
input_string[i]
) gives you a character with type Char
.temp[i] = ...
) Julia converts the right hand side to the same element type as the array temp
.Char
(right hand side) to an Int
(which is the element type of temp
) gives the ASCII value corresponding to the character.The string "200"
consists of the characters '2'
, '0'
and '0'
, which ASCII values are 50
, 48
and 48
so we would expect temp
to be [50, 48, 48]
BUT the loop has a bug since it should check for i <= length(input_string)
, so the last element beeing 0
is there from the initialization.
Here is the code I would have written for this:
function str_to_ints(str)
r = Int[]
for c in str
ci = parse(Int, c)
push!(r, ci)
end
return r
end
Example:
julia> str_to_ints("200")
3-element Array{Int64,1}:
2
0
0
When converting "200" to an Int
vector [2, 0, 0] much shorter form is just:
parse.(Int,split("200",""))
or a 4x faster version
parse.(Int,(v for v in "200"))
and another 10% better:
parse.(Int,collect("200"))
Finally, the fastest I could think of:
[Int(v)-48 for v in "200"]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With