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