这是一个可能是土耳其方言的星期二可能拼写错误的单词:
"Çkinci gÜn".拼写与问题无关.我的问题是这个问题:
s = "Çkinci"
srev = reverse(s)
for i in 1:length(srev)
println(srev[i])
end
Run Code Online (Sandbox Code Playgroud)
有效,但是
for i in 1:length(s)
println(s[i])
end
Run Code Online (Sandbox Code Playgroud)
第二封信上的错误.事实上,Çkinci,但不是它的反向弦,不能在位置2的字母k处索引.
有谁知道为什么?"Çk"是一个Unicode转义序列还是什么?
Julia使用UTF-8字符串编码.实际上字符'Ç'需要2个字节.所以你应该写:
julia> for v in s
println(v)
end
Ç
k
i
n
c
i
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关字符串索引的详细信息:https://docs.julialang.org/en/latest/manual/strings/#Unicode-and-UTF-8-1.
为什么原因reverse版本的工作是人物k,i,n,c,i都是ASCII等你,你已经完成,并通过事故发生前没打多字节字符只需要1个字节length(返回数个字符的字符串)等于到6,其位置Ç在reverse(s).但是,实际上你的字符串需要7个字节,你可以通过调用来检查:
julia> ncodeunits(s)
7
julia> sizeof(s)
7
julia> length(s)
6
Run Code Online (Sandbox Code Playgroud)
编辑:
在Julia字符串中,在调用getindex它们时使用字节索引而不是字符索引.这是出于性能原因,因为在UTF-8中,罚款第n个字符索引的成本是O(n).
如果要i在字符串s写入中获取-th字符的字节索引nextind(s, 0, i).例如,s[nextind(s, 0, i)]将返回i字符串中的第 - 个字符s.请注意,只有在想要从字符串中获取一个字符时才应使用它.如果你需要很多,那么在字符串上使用迭代会更有效.