我是julia编程的新手,不知道我写的内容是否正确。
问题是我有两个字符串,第一个是“ dog”,第二个是“ fish”,因此这些字符串的合并应一个字符一个字符地完成,例如:“ dfoigsh”。
我正在尝试编写代码以合并两个字符串,但这不起作用:
str1 = "fuad"
str2 = "hesen"
result = ""
str = ""
merge = str1 * str2
if length(str1)>length(str2)
str= str1
else str=str2
end
for i = 1:length(merge)
result[i]=str1[i] #fuad , hesenkl, result = fhueasdenkl
result[j+1]=str2[j]
j=j+1
i=i+1
end
println(result)
println(str)
答案 0 :(得分:3)
请注意,在Julia中,字符串是不可变的。因此,要合并它们,您必须像以前一样使用*
运算符:
julia> str1 = "fuad"
"fuad"
julia> str2 = "hesen"
"hesen"
julia> merge = str1 * str2
"fuadhesen"
如果要练习遍历字符串,可以创建Vector
和str1
中包含的str2
个字符,然后使用转换为String
join
例如:
julia> res = Char[]
0-element Array{Char,1}
julia> for c in str1
push!(res, c)
end
julia> res
4-element Array{Char,1}:
'f'
'u'
'a'
'd'
julia> for c in str2
push!(res, c)
end
julia> res
9-element Array{Char,1}:
'f'
'u'
'a'
'd'
'h'
'e'
's'
'e'
'n'
julia> join(res)
"fuadhesen"
这是您想要的吗?
编辑:这是一个合并示例:
julia> str1 = "fuad"
"fuad"
julia> str2 = "hesen"
"hesen"
julia> str1, str2 = "fuad", "hesen"
("fuad", "hesen")
julia> c1, c2 = collect(str1), collect(str2)
(['f', 'u', 'a', 'd'], ['h', 'e', 's', 'e', 'n'])
julia> res = Char[]
0-element Array{Char,1}
julia> for i in 1:max(length(c1), length(c2))
i > length(c1) || push!(res, c1[i])
i > length(c2) || push!(res, c2[i])
end
julia> res
9-element Array{Char,1}:
'f'
'h'
'u'
'e'
'a'
's'
'd'
'e'
'n'
julia> join(res)
"fhueasden"
答案 1 :(得分:3)
您的代码有很多问题。 @BogumilKaminski展示了一般如何连接字符串的方法,但是您询问“编写的内容是否正确”,所以我会指出一些问题。
str1 = "fuad"
str2 = "hesen"
result = ""
str = ""
merge = str1 * str2
如上所述,字符串是不可变的,这意味着一旦创建了一个字符串,就无法更改它,只能创建一个新的字符串。上面,您正在将result
初始化为一个空字符串-这是行不通的,您无法更新它。您也正在初始化str
,但这也没有意义,因为在下面您要重新分配它,因此无论如何初始化都是浪费的。还请注意,str1
和str2
的长度不同,这是一个问题。
if str1>str2
str= str1
else str=str2
end
在这里,您正在将str1
和str2
与>
进行比较。我不确定你要干什么。这是一个词法比较,因此您要按字母顺序对其进行排序。那是你想要的吗?还是您想比较它们的长度?在这种情况下,您应该写length(str1) > length(str2)
。如果您确实想要按字母顺序比较,则可以改写str = max(str1, str2)
。
for i = 1:merge
result[i]=str1[i]
result[j+1]=str2[j]
j=j+1
i=i+1
end
根据四个或五个原因(取决于您的计算方式),此方法将无效。
1:merge
没有意义,因为merge
是一个字符串。您不能从1到“ fuadhesen”进行计数。 (而且,您不能使用字符串或字符作为数组的索引。)我猜您的意思是for i = 1:length(merge)
,对吗?
字符串是不可变的,因此无论如何您都无法对它们进行突变/更新。
result[i] = str1[i]
,因为result
为空并且没有空间接受任何字符。如果字符串是可变的,则必须使用push!
。j
仅显示在循环中,没有任何初始值。那是哪里来的? 编辑:顺便说一句,这是您合并问题的部分解决方案。您可以使用zip
函数,该函数像拉链一样将两个(或更多)迭代器“压缩”在一起。然后,使用append!
函数将多个元素添加到集合的末尾(对于单个字符,您可以使用push!
)。最后,使用join
创建一个字符串:
cstr = Char[] # initialize empty vector of Characters
for c in zip(str1, str2) # iterate over zipped strings
append!(cstr, c) # append them onto your empty array
end
# push!(cstr, last(str2)) # str1 and str2 are different lengths, if you want last 'n' to join you can uncomment this line.
str = join(cstr) # collect into string
请确保您阅读了字符串文档https://docs.julialang.org/en/v1/manual/strings/,还查阅了push!
,append!
,zip
和join
的文档。只需复制代码,您将不会学到很多东西。
答案 2 :(得分:1)
其他答复在解释字符串和指向更多学习资源方面做得很好,因此我将略过一点,仅提出解决方案。
result = string(Iterators.flatten(zip(str1, str2))...)
但是请注意,这会截断最长的字符串以匹配最短的字符串。